如何对PAGE的所有子代(包括多级孙代)进行测试

时间:2018-08-29 作者:rudtek

我想添加一个图像到父页面及其所有子页面,包括第二级孙子。我不想在任何其他页面上显示该图像。

以下是我目前掌握的情况:

if(is_page() || is_single()) {
global $post;
if ($post->post_parent == \'27\' || $post->ID == \'27\') { 
    $ntest=\'<div class="clearlogo"><img alt="nodal Clear logo" width="150" src="\'.get_stylesheet_directory_uri().\'/images/nodal-clear-logo.png"></div>\';
}else{ 
    $ntest=\'\';
}
这适用于第一级和父母,但不适用于孙子。我曾想过添加第二级页面ID,但认为有更好的方法。

我觉得我错过了一些简单的事情。

我在一个函数中编写这篇文章,该函数将把它添加到带有\\u内容的内容中(下面是完整内容):

function rt_before_after($content) {
    if(is_page() || is_single()) {
      global $post;
      if ($post->post_parent == \'27\' || $post->ID == \'27\') { 
        $ntest=\'<div class="clearlogo"><img alt="nodal Clear logo" width="150" src="\'.get_stylesheet_directory_uri().\'/images/nodal-clear-logo.png"></div>\';
      }else{ 
        $ntest=\'\';
      }
        $beforecontent = $ntest.\'<h1 class="title">\'.get_the_title().\'</h1>\';

        $fullcontent = $beforecontent . $content;
    } else {
        $fullcontent = $content;
    }

    return $fullcontent;
}
add_filter(\'the_content\', \'rt_before_after\');

1 个回复
最合适的回答,由SO网友:Shibi 整理而成

您可以使用get_ancestors() 检查帖子是否有祖父母id或祖父母id等。。

但是你必须检查每一个帖子。。。

function rt_before_after($content) {
    if(is_page() || is_single()) {
      global $post;
      $ancestors = get_ancestors( $post->ID, \'page\' );
      if ( in_array( 27, $ancestors ) || $post->ID == \'27\') {
        $ntest=\'<div class="clearlogo"><img alt="nodal Clear logo" width="150" src="\'.get_stylesheet_directory_uri().\'/images/nodal-clear-logo.png"></div>\';
      }else{
        $ntest=\'\';
      }
        $beforecontent = $ntest.\'<h1 class="title">\'.get_the_title().\'</h1>\';

        $fullcontent = $beforecontent . $content;
    } else {
        $fullcontent = $content;
    }

    return $fullcontent;
}
add_filter(\'the_content\', \'rt_before_after\');
从父母到孩子,你可以用另一种方式get_pages()

使用这种方法,您可以将其移动到单独的函数并调用一次,如果需要,甚至可以缓存它。我会选择第二种方法。

function rt_before_after($content) {
    if(is_page() || is_single()) {
      global $post;

      // get all the child pages and grandchild etc..
      $pages = get_pages( [\'child_of\'=>27] );
      $pages_ids = array_map( function( $item ) {
        return $item->ID;
      }, $pages );

      if ( in_array( $post->ID, $pages_ids ) || $post->ID == \'27\') {
        $ntest=\'<div class="clearlogo"><img alt="nodal Clear logo" width="150" src="\'.get_stylesheet_directory_uri().\'/images/nodal-clear-logo.png"></div>\';
      }else{
        $ntest=\'\';
      }
        $beforecontent = $ntest.\'<h1 class="title">\'.get_the_title().\'</h1>\';

        $fullcontent = $beforecontent . $content;
    } else {
        $fullcontent = $content;
    }

    return $fullcontent;
}
add_filter(\'the_content\', \'rt_before_after\');

结束

相关推荐

从外部php文件注册自定义帖子类型的正确方式?

我有一个类文件,为了整洁、可读性等,我将自定义帖子类型分离到子文件夹中自己的文件中。我想现在在我的插件中初始化CPTindex.php 班我的班级是在plugins_loaded 在我的构想中,我有以下几点:public function __construct() { add_action(\'admin_enqueue_scripts\', array($this,\'init_admin_scripts\')); add_action(\'wp_enqueue_scr