首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >古腾堡第一区块的网页条件?

古腾堡第一区块的网页条件?
EN

WordPress Development用户
提问于 2019-09-25 12:19:25
回答 1查看 2.1K关注 0票数 2

我已经建立了一些自定义古腾堡区块使用ACF。我已经创建了一个块,我想在该块中显示页面标题,但前提是它是页面上的第一个块。如果该块也出现在页面较低的位置,我不希望它显示页面的标题。

我试过这个:

代码语言:javascript
运行
复制
$post = get_post(); 

if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );

    if ( $blocks[0]['blockName'] === 'acf/custom-block' ) {
    }
}

它通过页面上的块进行解析,并查看该数组中的第一个块是否是我的自定义ACF块。上面的片段可以工作,但不是我想要的。是的,它正在检查内容中的第一个块是否是我的ACF自定义块,但这是检查整个页面,所以即使我将我的自定义块作为页面上的第一个块,但是在页面上还有我的自定义块的第二个实例,这个条件仍然会在较低的块上显示页面标题,因为技术上第一个块仍然是我的自定义块。

我需要的是一个条件语句,它检查这个块本身是否是页面上的第一个块,而不是检查页面上的第一个块是否是自定义块的实例。

这种条件在古腾堡有可能吗?

EN

回答 1

WordPress Development用户

发布于 2020-04-22 17:46:43

下面是我想出的一个解决方案,它适用于Wordpress 5.4和ACF 5.8.9。

首先,您需要在functions.php中的某个地方使用这个函数:

代码语言:javascript
运行
复制
/**
 * Get ID of the first ACF block on the page
 */
function sg_get_first_block_id() {
    $post = get_post(); 

    if(has_blocks($post->post_content)) {
        $blocks = parse_blocks($post->post_content);
        $first_block_attrs = $blocks[0]['attrs'];

        if(array_key_exists('id', $first_block_attrs)) {
            return $first_block_attrs['id'];
        }
    }
}

此函数用于获取页面上第一个块的块id (如果该块具有块id )。(据我所见,只有ACF块具有块id属性。核心区块没有)。

现在,在块模板文件中可以这样做:

代码语言:javascript
运行
复制

$block['id']是每个块实例的唯一id。然后,我们将其与页面上第一个块的id进行比较。如果它们是相同的,则函数将返回true,并显示文章的标题。

我是如何使用它的

我已经创建了一个全尺寸的背景图像和内容内部的自定义封面块。如果这是页面上的第一个块的话,我不想让这个块充当英雄元素。

通过在我的块模板文件中使用上述方法,如果它是页面上的第一个块,我可以在h1标记中而不是h2中显示自定义覆盖块标题。

代码语言:javascript
运行
复制

我也不想隐藏普通的标题和面包屑,这样封面块就可以与导航头完美地对齐。为此,我在我的functions.php文件中创建了这个函数:

代码语言:javascript
运行
复制
/**
 * Check first block type
 * @param string block_handle - handle of the block
 */
function sg_first_block_is($block_handle) {
    $post = get_post(); 

    if(has_blocks($post->post_content)) {
        $blocks = parse_blocks($post->post_content);

        if($blocks[0]['blockName'] === $block_handle) {
            return true;
        }else {
            return false;
        }
    }
}

我可以使用这个条件来检查第一个块是什么块类型,然后相应地显示或隐藏面包屑和标题:

代码语言:javascript
运行
复制
if(!sg_first_block_is('acf/sg-cover')):
    get_template_part('template-parts/components/component', 'breadcrumbs'); 
    echo '' . get_the_title() . '';
endif;
票数 4
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/349050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档