如何仅显示首页上帖子中的特定阻止?

时间:2019-01-11 19:35:17

标签: wordpress wordpress-gutenberg gutenberg-blocks

我正在为主题创建自定义标题块。它从三个不同的图像和文本生成特殊的布局。当帖子包含此阻止时,应仅在首页上显示此阻止。我找到了一个可行的解决方案,但似乎很脏,我也想将其封装在块插件中,而不是主题中。

主题的当前解决方案(在content.php中):

<table>

我还尝试将其集成到插件文件中:

$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();
  }
}

但这不起作用,因为'has_blocks'返回false,'parse_blocks'不返回任何东西。

更新

我找到了解决方案。您需要为add_filter函数赋予优先级(第三个参数):

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' );

1 个答案:

答案 0 :(得分:0)

这可以通过CSS来完成:Wordpress的首页在其 BindingExpression bindingExpression = BindingOperations.GetBindingExpression(this, SelectedItemProperty); object s = bindingExpression?.ResolvedSource; string pn = bindingExpression?.ResolvedSourcePropertyName; var type = s?.GetType().GetProperty(pn)?.PropertyType; 标签中具有home类,因此,例如,如果您的区块类为body,则可以将其写入样式表:

.my_block_1

这将在首页以外的所有页面上隐藏该块。