我正在为主题创建自定义标题块。它从三个不同的图像和文本中生成一个特殊的布局。当帖子包含此块时,它应该只在首页上显示此块。我找到了一个可行但看起来很脏的解决方案,而且我想将它封装在块插件而不是主题中。
主题中的当前解决方案(在 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' 不返回任何内容。
更新
我找到了解决方案。您需要给 add_filter 函数一个优先级(第三个参数):
add_filter( 'the_content','namespace_block_frontpage_blocks', 0 );