WordPress 有内置的条件函数,用于测试页面
if ( is_page(2) ) {
// stuff
}
或测试页面是否为某个页面的子页面
if ( $post->post_parent == '2' ) {
// stuff
}
但没有内置函数可以将这两者结合起来,而这是一种相当常见的需求。例如,为整个内容“分支”加载一个特殊的 CSS 页面。例如,一个“视频”页面及其所有子视频页面。
此函数(添加到 functions.php 文件)创建了新的逻辑函数,可以以这种方式使用
function is_tree($pid) { // $pid = The ID of the page we're looking for pages underneath
global $post; // load details about this page
if(is_page()&&($post->post_parent==$pid||is_page($pid)))
return true; // we're at the page or at a sub page
else
return false; // we're elsewhere
};
用法
if (is_tree(2)) {
// stuff
}
嘿,
如何让它适用于类别?
如果我将“is_page”替换为“is_category”,它适用于类别概述,但不适用于其中的所有文章。
保罗
这很好,但它只工作在一级深度。
来自 WordPress Codex
“请注意,如果您有多级页面,则父页面是直接位于上方的页面,而不是层次结构顶部的页面。”
在 WP Codex 上了解更多信息:条件标签
附言
我希望没有人从这个片段中赚到钱,它直接来自 WordPress Codex。
注意,我遇到了这个问题“只工作在一级深度”
但此函数适用于所有“祖先”,而不仅仅是单级“子”页面
也直接来自 WP Codex http://codex.wordpress.org/Conditional_Tags 函数
80 端口!玛丽·米!
谢谢。
80 端口 - 谢谢!
Port 80 的 is_tree() 函数可以解决问题,但如果 PHP 通知已开启,则会抛出 Notice。作为解决方法,我在
if ($root < 0) { return false; }
之后
$root = count($ancestors) - 1;
之前
$parent = $ancestors[$root];
还没有进行大量测试,但到目前为止,这似乎按预期工作。
嗯,我的“大于”角括号被转义了,但这是我的想法
if ($root [小于] 0) { return false; }
我一直在使用这个版本,它允许使用 slug 查找页面/子页面/孙子页面
我认为它可以改进,而且不太优雅,但我希望它能有所帮助。
这里有很好的代码片段!
如果您不想指定特定的页面 ID,如何使用此功能?我需要能够动态检查我碰巧所在的任何当前页面是否属于分支(无论是父级还是子级),如果是,则根据自动检索的页面 ID 输出菜单。
任何帮助或建议将不胜感激。
谢谢!:)
谢谢!我的 WordPress 主题侧边栏需要这个 :)
酷,非常感谢发布这个!非常有用 =)
太好了,谢谢!
很棒的教程!谢谢!我还有另一种方法。
我发现上面的教程比我的方法更好。从现在开始,我将使用这种方法。
今天不得不处理这个问题,下面这段代码对我来说非常有效(适用于任何嵌套级别)
谢谢,这正是我需要的。
嘿,瑞恩,这正是我缺少的。感谢发布!
非常感谢您发布这个!Port 80 的代码确实不太说得通......这段代码非常短小高效,而且准确地完成了我的任务,没有那么多添加混乱的随机变量 :)
谢谢!
您好,
我很好奇这段代码。我正在构建一个网站,其中父页面有子页面。例如......我有一个名为
关于我们(父页面)
公司概况(子页面)
董事(子页面)
公司概况页面没问题,因为它与关于页面相同。但是,当我单击董事页面时,我希望父页面“关于我们”也突出显示。因此,子页面和父页面都会突出显示。我编写的代码非常简单,如下所示
关于我们 - 导航代码。
<a class="about_us" href="”
>
和董事 - 导航代码。
<a href="”
class=”director”>
是否存在一种代码,我可以说,如果我们所在的父页面是“关于我们”,使其也显示为选中状态?您可以为我写一个示例吗?
提前感谢。
哦,网站的链接是 http://www.fairwayviewapartmentssamoa.com
非常感谢您分享这个。我在搜索各种帮助时多次遇到过您的网站。坚持下去,再次感谢您。
有没有办法让它通过 slug 工作?
我想我们必须从 slug 获取 id。
我将在本周末玩一玩。
不确定您是否已经解决这个问题,但对于那些想知道的人
将此添加到函数中
为了让它适用于 slug 而不是页面 ID。是的,函数调用中需要 $pid,我不确定确切的原因,但 $slug 在那里不起作用。
这正是我需要的!!!
我试图根据子页面的父页面来编辑页面上的子菜单导航链接。
简而言之,在子页面上,我需要导航菜单反映子页面的父页面的链接,而不是子页面本身的链接。
本教程帮助我朝着正确的方向前进。现在我可以向当前页面添加自定义类了!
这完美地起作用了。
非常感谢您。
你好,
这正是我需要的。最棒的是,您的代码片段运行得非常完美!非常感谢您 :)
非常感谢!这真的救了我!
我在几乎每个项目中都使用这个函数!
if (have_problem()) {
go to css-tricks.com
}
没错 :d
这就是我一直在寻找的。
谢谢。
很棒的小贴士。
感谢分享 :)
我仍然很喜欢这个 (: 干杯
你可以这样做
你可以这样称呼它
现在你在 myPageSlug1 的每个子页面上都会得到一个 Hello World
太棒了。救了我!
如何编写一个函数来检查 $post->post_parent 是否等于一个或另一个 id,而不是仅仅一个 id?
Chris,你为什么不也锁定这个主题呢?你已经关闭了其他很多有用的主题。
有没有任何代码或条件可以检查当前页面是否有子页面?我指的是当前页面是否有父页面。
我明白了 :)))
query(array(‘post_type’ => ‘page’));
$id = $post->ID;
$children = get_page_children( $id, $all_wp_pages );
if($children) {
echo “Parent”;
}
?>
代码更正。
query(array(‘post_type’ => ‘page’));?>
<?php $id = $post->ID;
这是我的方向。希望对正在寻找显示两者的人有所帮助 包含深度和特定子页面内容。我在这里使用 list_pages_at_depth(); 插件。查找第二级和第三级的子项,然后显示一些页面。
非常有用,非常感谢
创建了一个函数来查看当前页面和任何父页面,它逐个搜索层次结构,以查找与 slug URL 的匹配项。我选择 slug URL 而不是 ID,因为这些在我们的本地、暂存和生产环境之间总是不同的,但 URL 保持一致。
我在此处创建了一个 gist。
https://gist.github.com/philcook/15bd50aeb8f80315d2bcaa9720c45bbb
Chris Coyier,哇!谢谢您!
Port80 中的这些行似乎是多余的。
$parent
从未使用,因此$root
也无需使用bbPress 又如何呢?因为它在那里不起作用 :(