检查当前页面是否为指定顶级页面的子级

时间:2021-02-09 作者:Daveh0

我正在编写一些代码,将聊天机器人嵌入到我网站上的指定页面。我有一个接受2个参数的函数/快捷码,includeexclude. 每个的值可以是单个post ID或以逗号分隔的post ID字符串(稍后在shortcode函数中转换为数组)。如果两个参数都是null (默认),bot将嵌入到站点的每个页面上。如果向其中任何一个传递了正确的值,则该函数只会将bot添加到ID位于include 数组和/或不会将其添加到exclude 大堆

if (in_array($id, $exclude) || bene_get_pods_val(\'disable_chatbot\') === true) return;
if ((count($include) === 0 && count($exclude) === 0) || in_array($id, $include)) {
    embed_bot();
}
除此之外,我希望能够在网站上排除或包括页面的整个部分(产品、解决方案、公司、知识库等)。我知道我可以将一些内容传递给快捷码,告诉它包含/排除属于所传递的1个或多个ID的子页面。没问题。

if( $include_children && $top_level_page_id === wp_get_post_parent_id(get_the_ID()) ) {
  return true;
}
我的问题来自自定义帖子类型。例如,我有一个知识库部分,它使用一篇常规文章作为其顶层页面(即位于www.example.com/knowledge-base/) 但该部分中的所有内容页都是自定义帖子类型。因此,我无法将它们设置为该顶级页面的子级,因此它们的每个父页面ID都返回0。

我知道我能查到$_SERVER[\'REQUEST_URI\'] 针对特定段塞

function pageIsInSection($top_level_page_id) {
  $is = false;
  $parent_slug = get_post_field(\'post_name\', $top_level_page_id);
  if(false !== strpos($_SERVER[\'REQUEST_URI\'], \'/$parent_slug/\')) {
    $is = true;
  }
  return $is;
}
但这似乎是一种黑客行为。有没有更好的方法来确定当前页面是否是知识库(或任何其他具有自定义帖子类型的部分)页面?

1 个回复
SO网友:Sabbir Hasan

我不会为您的实际问题提供解决方案,但我将向您展示如何验证当前页面是否是特定顶级页面的子页面。如果需要检查当前页面是否具有特定的父页面,可以执行以下操作:

<?php
    $currentPage = get_the_id();
    $pageAncestors = get_post_ancestors($currentPage);

    $hasParent = in_array($currentPage,$pageAncestors);
在这里get_post_ancestors 将该特定页的所有父id作为数组返回,并使用in_array 您可以验证id是否存在。了解更多信息get_post_ancestors 在这里

相关推荐

Taxonomy filter all children

我有一个自定义分类过滤器,它将过滤选定分类中的所有页面。我希望代码能够选择该分类法中的页面,以及千页的子页面。这是密码。add_action(\'restrict_manage_posts\', \'restrict_manage_posts_section\'); function restrict_manage_posts_section() { global $post_type; if ( is_object_in_taxonomy( $post_t