我正在编写一些代码,将聊天机器人嵌入到我网站上的指定页面。我有一个接受2个参数的函数/快捷码,include
和exclude
. 每个的值可以是单个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;
}
但这似乎是一种黑客行为。有没有更好的方法来确定当前页面是否是知识库(或任何其他具有自定义帖子类型的部分)页面?