如何检查 WordPress post 是否有 child 和兄弟姐妹?

How to check if a WordPress post has child and siblings?

我需要在某些页面中隐藏一段代码。这些页面都是 child 以及 ID 为 8194 的 parent 页面的兄弟页面。

为了隐藏 child 页面中的代码,我使用 if ( get_post_field( 'post_parent' ) != 8194 ),但问题是有几个同级页面,代码对它们不起作用,它只能起作用在 child 页面中。

这是我的页面层次结构:

Parent page 1
- Child page 1
-- Sibling page 1
-- Sibling page 2
...
-- Sibling page 10

如何隐藏同级页面中的代码?

谢谢

您可以使用wp_get_post_parent_id() 函数通过与get_the_ID() 函数进行比较来检查当前页面是父页面还是子页面。 is_page()这里,只是一个冗余。

<?php
/**
* wp_get_post_parent_id
* Returns the ID of the post’s parent.
* @link https://developer.wordpress.org/reference/functions/wp_get_post_parent_id/
*
* get_the_ID
* Retrieve the ID of the current item in the WordPress Loop.
* @link https://developer.wordpress.org/reference/functions/get_the_ID/
*/
if( is_page() && wp_get_post_parent_id( get_the_ID() ) ):
  //child
  echo 'This is THE Child, Grogu';
else:
  //parent
  echo 'This is THE Mandalorian, Mando';
endif; ?>

如果我没理解错的话,你要找top-most parent.

为此,我将使用 get_post_ancestors() 检索 post(和 returns parents 数组)的祖先的 ID:https://developer.wordpress.org/reference/functions/get_post_ancestors/

尝试这样的事情:

global $post;
$parents = get_post_ancestors($post->ID);
// Get the 'top most' parent page ID, or return 0 if there is no parent:
$top_parent_id = ($parents) ? $parents[count($parents)-1]: 0;

if ($top_parent_id != 8194) {
...
}

** 针对评论中 OP 第二个问题的更新代码:**

global $post;

// Don't show the code by default:
$show_code = false;

// This is an array of post ids where you want to show the code regardless of the parents id
$always_show_the_code_on_these_posts = array(111, 222, 333);

// Check if current post id is on the list:
if ( in_array($post->ID, $always_show_the_code_on_these_posts) ) {
    $show_code = true;
} else {
    // ...and only if it's not on the list run the previous test:
    $parents = get_post_ancestors($post->ID);

    // Get the 'top most' parent page ID, or return 0 if there is no parent:
    $top_parent_id = ($parents) ? $parents[count($parents)-1]: 0;

    if ($top_parent_id != 8194) {
        $show_code = true;
    }
}

if ($show_code) {   
...
}