Если вы новичок в написании плагинов для редактора блоков WordPress (Gutenberg), возможно, вы ищете, как получить метаданные текущего поста с помощью get_post_meta.
Не бойтесь, вы все еще можете get_post_metaпросто использовать getEditedPostAttribute('meta')текущий пост, чтобы получить всю мету, например:
const meta = wp.data.select('core/editor').getEditedPostAttribute('meta');
Пока вы сделали свой мета-ключ доступным в остальном API, теперь вы можете получить его из metaпеременной.
const meta = wp.data.select('core/editor').getEditedPostAttribute('meta');
const metaExample = meta['wholesomecode_meta_key_example'];
В приведенном выше коде я беру значение моего сообщения meta( wholesomecode_meta_key_example) и передаю его в переменную metaExample.
Чтобы убедиться, что метаданные вашего сообщения доступны в Gutenberg, вам необходимо зарегистрировать его и убедиться, что show_in_restдля него установлено значение true.
add_action( 'init', 'register_meta');
function register_meta() {
register_post_meta(
'post',
'wholesomecode_meta_key_example',
[
'show_in_rest' => true,
'single' => true,
'type' => 'string',
]
);
}
Получить метаданные из другого идентификатора сообщения
Если вы хотите получить метаданные другого сообщения, вы можете использовать getEntityRecordи передать ему идентификатор сообщения, которое вы хотите получить:
const {meta} = wp.data.select('core').getEntityRecord('postType', 'post', 42);
В приведенном выше примере вся мета для сообщения (при условии, что оно было зарегистрировано) теперь находится в metaпеременной.
Использование getEntityRecordэквивалентно выполнению get_post в Гутенберге.
Попробуйте в консоли
Войдите на свой сайт и используйте wpобъект в консоли во время редактирования сообщения, чтобы попробовать его самостоятельно. Вы должны легко работать с JSON-объектом метаданных поста:
wp.data.select('core/editor').getEditedPostAttribute('meta');
{
wholesomecode_meta_key_example: 'Example',
}
Обновление метаданных поста
Если вы хотите обновить метаданные записи из WordPress Gutenberg, вы можете сделать это с помощью editPostиeditEntityRecord.