Получить повторно используемый блок в php

#wordpress-gutenberg #gutenberg-blocks

#wordpress-gutenberg #gutenberg-blocks

Вопрос:

Хоть убейте, я ничего не могу найти о том, как это сделать: просто выведите повторно используемый блок gutenberg через php в шаблоне темы. Похоже, это должно быть выполнимо. Кто-нибудь?

Ответ №1:

Возможно, отвечая на мой собственный вопрос. Пожалуйста, скажите мне, есть ли лучший / более простой способ сделать это.

 <?php
    // get reusable gutenberg block:
    $gblock = get_post( 7418 );
    echo apply_filters( 'the_content', $gblock->post_content );
?>
  

Первый недостаток, который я вижу в этом, заключается в том, что неудобно искать идентификатор записи блока.

Комментарии:

1. Как вы находите идентификатор вашего повторно используемого блока?

2. Единственный известный мне способ — перейти сюда: /wp-admin/edit.php?post_type=wp_block Затем наведите указатель мыши на ссылку редактирования вашего блока и посмотрите на идентификатор в URL.

3. @protohominid Должно быть проще получить блок gutenberg (не идентификатор, а само содержимое), я также трачу много времени на поиск прямого решения и никак…

4. site.com/wp-admin/edit.php?post_type=wp_block

5. Я согласен. Я хотел бы решение, которое использует что-то вроде get_page_by_title(), потому что идентификатор изменится при перемещении темы на новый сайт.

Ответ №2:

Я только что нашел этот удобный маленький фрагмент. Он добавляет повторно используемые блоки в качестве ссылки администратора. Оказавшись там, вы можете легко определить идентификатор нужного вам повторно используемого блока. https://github.com/WordPress/gutenberg/issues/15549

 add_menu_page( 'linked_url', 'Reusable Blocks', 'read', 'edit.php?post_type=wp_block', '', 'dashicons-editor-table', 22 );
}

  

Комментарии:

1. Большое вам спасибо! Я не знаю, почему в WordPress это не включено по умолчанию.

Ответ №3:

Как указано gtamborero здесь, вы можете использовать get_page_by_title(), но вам нужно указать, что это ‘wp_block’. Его пример работает для меня (с использованием WP 5.8.1):

 get_page_by_title( 'Your Title', OBJECT, 'wp_block' );
  

Я использую его следующим образом:

 $myPost = get_page_by_title( 'Your Title', OBJECT, 'wp_block' );
$myContent = apply_filters('the_content', $myPost->post_content);
echo $myContent;
  

Ответ №4:

Существует способ выполнения запроса по заголовку без использования get_page_by_title (устаревший в 6.2). Мы можем использовать wp_query() с типом post wp_blocks, в котором хранятся повторно используемые блоки.

В приведенном здесь примере запрашивается wp_block, который озаглавлен «Глобальный призыв к действию» и опубликован.

 $query = new WP_Query(
    array(
        'post_type'              => 'wp_block',
        'title'                  => 'Global Call To Action',
        'post_status'            => 'publish',
        'posts_per_page'         => 1
    )
);
 
if ( $query->have_posts() ) {
    $object = $query->post;
    echo apply_filters('the_content', $object->post_content);
}

wp_reset_postdata();