Я создаю пользовательский блок заголовка для темы. Он генерирует специальный макет из трех разных изображений и текста. Когда сообщение содержит этот блок, оно должно показывать этот блок только на первой странице. Я нашел решение, которое работает, но кажется грязным, а также я хотел бы заключить это в плагин блока, а не в тему.
Текущее решение в теме (в content.php):
$content = get_the_content();
if( !is_frontpage() && has_blocks( $content ) ) {
$blocks = parse_blocks( $content );
if ( !empty($blocks) && $blocks[0]['blockName'] === 'namespace/block' ) {
echo $blocks[0]['innerHTML'];
}
else {
the_content();
}
}
Я также пытался интегрировать его в файл плагина:
function namespace_block_frontpage_blocks($content) {
if( is_front_page() && has_blocks( $content ) ) {
$blocks = parse_blocks( $content );
if ( !empty($blocks) && $blocks[0]['blockName'] === 'namespace/block' ) {
return $blocks[0]['innerHTML'];
}
}
return $content;
}
add_filter( 'the_content','namespace_block_frontpage_blocks' );
Но это не работает, поскольку has_blocks возвращает false, а parse_blocks ничего не возвращает.
UPDATE
Я нашел решение. Вам нужно дать функции add_filter приоритет (третий параметр):
add_filter( 'the_content','namespace_block_frontpage_blocks', 0 );