Вопрос или проблема
Как мне передать данные автора, такие как имя, биография и аватар, в блок?
Как мне передать данные автора, такие как имя, биография и аватар, в блок?
Вы этого не делаете.
Это нарушит быструю редакцию/редактор сайта/блоковые темы/синхронизированные шаблоны и вызовет множество проблем. Блок, который зависит от информации о авторе поста или любом другом динамическом значении поста, должен быть блоком, рендеримым на сервере с помощью PHP.
Это связано с тем, что мы не знаем правильное значение до момента его рендеринга, и ответ изменяется в зависимости от того, где блок отображается/редактируется.
Делать это на JavaScript — ошибка и это вызовет проблемы как с устаревшими авторами, так и с поврежденными блоками.
Используйте register_block_type
для регистрации блока на PHP и укажите функцию PHP для рендеринга вывода блока, используя опцию render_callback
, и используйте стандартные функции PHP для автора, такие как the_author
и т.д.. Вы также можете использовать фильтры PHP, чтобы заменить автора во время выполнения, чтобы это всегда был автор поста.
Затем, в реализации блока на JS, возвращайте null
в методе сохранения. Вы можете получить текущего автора из хранилища данных WP Core для предпросмотра, когда находитесь внутри редактора блоков, но для работы на фронтенде это не обязательно.
Таким образом, вам никогда не нужно и не следует выяснять текущего автора в JavaScript вашего блока.
Почему вы не можете использовать данные Core в компоненте редактирования.
Итак, как мне обратиться к текущему автору, используя core/data?
Вы не можете, это нарушит ваш блок, особенно если вы попытаетесь использовать его для компонента сохранения. Рендерьте его на PHP, поскольку мы не знаем, каково должно быть значение, пока блок не будет показан на фронтенде.
Например, предположим, что мы отображаем его внутри компонента редактирования, используя core data. Теперь все блоки цикла запросов будут неправильно показывать одного и того же автора, независимо от того, какой пост.
Если вы сделали это в редакторе сайта или редакторе шаблонов, то ваш блок будет показывать автора шаблона, а не поста.
Ответ или решение
Вопрос о том, как передать данные автора, такие как имя, биография и аватар в блок Gutenberg, касается важной темы, связанной с архитектурой блоков WordPress. Понимание правильного подхода к этому вопросу критично для обеспечения корректной работы как в редакторе, так и на фронтенде сайта.
Основные аспекты:
-
Не передавайте данные автора через JavaScript.
Хотя это может показаться простым решением, попытка получения данных автора через JavaScript приведет к потенциальным проблемам. Данные о посте и его авторе становятся доступными только во время рендеринга блока на сервере, что делает невозможным корректное отображение информации при редактировании или в блоках, созданных с использованием шаблонов. -
Используйте серверный рендеринг с помощью
register_block_type()
.
Для правильного отображения данных автора в вашем блоке вам необходимо зарегистрировать блок в PHP, указывая функцию обратного вызова для рендеринга. Это можно сделать следующим образом:function my_custom_block_render($attributes) { // Получение данных автора $author_id = get_the_author_meta('ID'); $author_name = get_the_author_meta('display_name', $author_id); $author_bio = get_the_author_meta('description', $author_id); $author_avatar = get_avatar($author_id); // Формирование HTML-кода для вывода return sprintf( '<div class="author-block"> <div class="author-avatar">%s</div> <div class="author-info"> <h2>%s</h2> <p>%s</p> </div> </div>', $author_avatar, esc_html($author_name), esc_html($author_bio) ); } function register_my_custom_block() { register_block_type('my-plugin/author-block', array( 'render_callback' => 'my_custom_block_render', )); } add_action('init', 'register_my_custom_block');
-
Возвращайте
null
в методеsave
.
В JavaScript реализации вашего блока не следует возвращать никаких данных, связанных с автором. Вместо этого в методе сохранения (save method) возвращайтеnull
, что указывает на то, что весь вывод будет сделан на сервере в процессе рендеринга. Это гарантирует, что никакие недостоверные данные не будут сохранены.const save = () => { return null; // Все будет обработано на сервере };
-
Проблемы с использованием core data в компоненте редактирования.
Если вы попытаетесь использовать информацию об авторе через core/data в JavaScript компоненте, это может вызвать проблемы с отображением. Например, если вы подключите данные автора в редакторе, блоки в цикле запросов будут показывать одного и того же автора, независимо от поста. Это также может привести к неправильному отображению данных, если блок размещается в редакторе шаблонов.
Заключение:
Итак, для корректного отображения данных автора в блоке Gutenberg вам необходимо использовать серверный рендеринг через PHP. Избегайте использования JavaScript для получения данных о текущем авторе, так как это может привести к некорректному отображению и функциональным проблемам. Вместо этого, используйте функции WordPress для получения данных и возвращайте результат через функцию обратного вызова, обеспечивая тем самым надежный и предсказуемый результат.