Коли ви реєструєте та зберігаєте атрибути в редакторі блоків WordPress (Gutenberg), у вас є можливість зберігати їх як мета публікації замість звичайних атрибутів блоку.
Використовуючи цей метод, ви можете мати налаштування у своєму блоці, яке може контролювати щось у публікації, або на шаблоні.
Важлива примітка щодо відтворення мета-атрибутів публікації
Ви не можете відобразити мета-атрибути публікації за допомогою методу збереження JavaScript. Команда Gutenberg прийняла рішення, щоб запобігти цьому, оскільки блоки, які відображають мета-поля публікації, можуть бути легко зламані через зміну мета публікації в іншому місці публікації.
У цьому посібнику ми збираємося розширити те, що ми вже створили в нашому посібнику з плагінами WordPress Gutenberg, а також посібнику Dynamic Block.
передумови
- Ознайомтеся зі створенням плагінів для WordPress Gutenberg
- Знайомі динамічні блоки та рендеринг на сервері
Реєстрація мета повідомлення в PHP
Перш ніж ми зможемо використовувати мета-поле публікації в JavaScript, ми повинні переконатися, що ми зареєстрували його в PHP за допомогою register_metaі що для show_in_restаргумента встановлено значення true.
Дотримуючись посібника Dynamic Block, відкрийте кореневий файл PHP плагіна (в даному випадку wholesome-plugin.php) і додайте наступний код у нижню частину цього файлу після всіх інших функцій:
function wholesomecode_wholesome_plugin_register_post_meta() {
register_meta(
'post',
'_wholesomecode_wholesome_plugin_block_text',
[
'auth_callback' => '__return_true',
'default' => __( 'Wholesome Plugin – hello from the editor!', 'wholesome-plugin' ),
'show_in_rest' => true,
'single' => true,
'type' => 'string',
]
);
}
add_action( 'init', 'wholesomecode_wholesome_plugin_register_post_meta' );
Цей код реєструє мета-поле, що викликається _wholesomecode_wholesome_plugin_block_textдля postтипу публікації. Це також гарантує, що REST API може отримати доступ до цього мета-поля зі show_in_restзначенням, яке має значення true.
Ми також передаємо функцію __return_trueв auth_callbackаргумент, щоб переконатися, що у нас є дозволи на доступ до цього параметра. Якби ми хотіли покращити безпеку цього параметра, ми б змінили його на спеціальну функцію, яка перевіряє певну роль користувача.
Реєстрація мета-атрибутів публікації в JavaScript
Знову ж таки, продовжуючи попередній посібник, відкрийте /src/index.jsта замініть attributesнаступним:
attributes: {
blockText: {
meta: '_wholesomecode_wholesome_plugin_block_text',
source: 'meta',
},
},
Замість того, щоб вказувати тип атрибута та призначати значення за замовчуванням, ми замість цього визначаємо мета-ключ, з якого буде надходити атрибут даних, і вказуємо, що sourceатрибут атрибута є meta.
Як зазначено в попередженні у верхній частині цього посібника, ви не можете отримати доступ до атрибутів мета-поля публікації за допомогою saveметоду JavaScript, тому скомпілюйте плагін npm startі подивимося, як ми можемо вивести мета.
Рендеринг мета повідомлення
Оскільки ми зберегли наш атрибут як мета публікації, ми могли вивести це будь-де в WordPress за допомогою get_post_meta(за умови, що у нас є $post_id):
get_post_meta( $post_id, '_wholesomecode_wholesome_plugin_block_text', true );
Продовжуючи посібник із динамічного блокування, давайте подивимося, як ми можемо отримати доступ до цього атрибута на стороні сервера в PHP.
Мета недоступна через $attributesпараметр render_callback, оскільки мета-атрибути публікації не передають своє значення цьому параметру, але ми можемо отримати доступ до глобального $postоб’єкта, щоб отримати ідентифікатор публікації.
Маючи це на увазі, давайте оновимо наш register_block_type, щоб виводити мета публікації:
register_block_type(
'wholesomecode/wholesome-plugin',
array(
'editor_script' => 'wholesomecode-wholesome-plugin-block-editor',
'editor_style' => 'wholesomecode-wholesome-plugin-block-editor',
'render_callback' => function( $attributes, $content) {
global $post;
$block_text = get_post_meta( $post->ID, '_wholesomecode_wholesome_plugin_block_text', true );
return "<p class='wp-block-wholesomecode-wholesome-plugin'>$block_text</p>";
},
'style' => 'wholesomecode-wholesome-plugin-block',) );
Зауважте, що нам більше не потрібно реєструвати attributesтут, оскільки ми лише отримуємо доступ до мета-поля post через get_post_metaфункцію.
Використання блоку
Це не найкращий випадок використання такого типу мета, однак, коли ми використовуємо блок, ми бачимо, що оскільки ми зберігаємо атрибути як post meta, якщо ми оновлюємо атрибут в одному блоці, він оновлює всі блоки, як мета публікації зберігається в публікації, а не в окремому блоці:
Мета-атрибути публікації в дії
- Подивіться на створення вкладених дочірніх блоків за допомогою
InnerBlocksкомпонента - Продовжуйте використовувати post meta в Gutenberg, створивши користувацькі мета-бокси в Gutenberg
- Подивіться на використання параметрів для зберігання даних у таблиці параметрів у Gutenberg