35

是否可以检查页面是父页面还是子页面?

我的页面设置如下:

-- 家长

---- 儿童第 1 页

---- 儿童第 2 页

等等

如果它是父页面,我想显示某个菜单,如果它在子页面上,我想显示不同的菜单。

我知道我可以做类似下面的事情,但我想让它更动态一点,而不包括特定的页面 ID。

<?php
if ($post->post_parent == '100') { // if current page is child of page with page ID 100
   // show image X 
}
?>
4

5 回答 5

77

您可以测试帖子是否是这样的子页面:*
(来自http://codex.wordpress.org/Conditional_Tags)*

<?php

global $post;     // if outside the loop

if ( is_page() && $post->post_parent ) {
    // This is a subpage

} else {
    // This is not a subpage
}
?>
于 2012-12-17T15:23:44.203 回答
7

我知道这是一个老问题,但我一直在寻找同样的问题,直到我想出这个问题才找到一个清晰而简单的答案。我的回答没有回答他的解释,但它回答了我正在寻找的主要问题。

这会检查页面是子页面还是父页面,并允许您仅在子页面或父页面上显示侧边栏菜单,而不是在没有父页面或子页面的页面上显示。

<?php 
   global $post;    
   $children = get_pages( array( 'child_of' => $post->ID ) );
   if ( is_page() && ($post->post_parent || count( $children ) > 0  )) : 
?>
于 2015-07-13T17:17:01.063 回答
6

将此函数放在主题的functions.php 文件中。

function is_page_child($pid) {// $pid = The ID of the page we're looking for pages underneath
  global $post;         // load details about this page
  $anc = get_post_ancestors( $post->ID );
  foreach($anc as $ancestor) {
      if(is_page() && $ancestor == $pid) {
          return true;
      }
  }
  if(is_page()&&(is_page($pid)))
     return true;   // we're at the page or at a sub page
  else
      return false;  // we're elsewhere
};

然后你可以使用它:

<?php 
    if(is_page_child(100)) {
        // show image X 
    } 
?>
于 2014-11-20T16:18:09.060 回答
3

对于 Wordpress,您可以简单地检查:

<?php 
  if (wp_get_post_parent_id(get_the_ID())) {
    echo "I am a child page";
  } 
?>
于 2020-11-07T00:48:33.513 回答
0

您可以使用get_pages()函数。它需要一个关联数组作为参数。您可以给该数组'child_of' => get_the_ID()以获取当前页面的子级,如果它没有任何子级,则整个get_pages()函数将返回 false,否则它将返回一个计算结果为 true 的值,可以将其分配给变量以用作 if 语句中的条件。

$iAmParent = get_pages(array('child_of' => get_the_ID()));
于 2022-01-04T12:21:56.850 回答