【问题标题】:How can I show only specific block from post on front page?如何仅显示首页帖子中的特定块?
【发布时间】:2019-06-06 18:09:51
【问题描述】:

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

主题中的当前解决方案(在 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 );

【问题讨论】:

    标签: wordpress wordpress-gutenberg gutenberg-blocks


    【解决方案1】:

    这可以通过 CSS 完成:Wordpress 中的主页在其 body 标记中有 home 类,因此如果您的块的类是 .my_block_1,您可以将其写入样式表:

    .my_block_1 {
      display: none;
    }
    .home .my_block_1 {
      display: block;
    }
    

    这将在除主页之外的所有页面上隐藏该块。

    【讨论】:

    • 嗨,约翰内斯。不幸的是,我的意思正好相反。隐藏首页上除第一个块之外的所有其他块。我当然也可以用 css 来做这件事,但这会导致整个帖子被加载到首页...
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多