根据父页面名称生成父/子页面ID数组

时间:2019-03-27 作者:Graeme Bryson

我一直在使用以下功能(手动更新ID)来分组父项(&P);将子页放入数组中,然后在if/else语句中使用该数组来显示内容,具体取决于当前页是否在该数组中。示例如下:

function id_array_function() {
    $array = array(
    10, // Example Parent ID
    12, // Example Child ID
    14  // Example Child ID
  );
    return $array;
}
function content_placement_function() {
    if( is_page( id_array_example() ) ) {
    // If current page is in array, do this
    }
    else {
    // Otherwise, do this
    }
}
理想情况下,我希望创建一个可重用的函数,可以将任何页面名称插入其中(避免由于本地/生产安装具有不同页面ID的问题而使用ID),并返回一个父页面名称和任何子页面名称的数组,以便在其他地方使用,例如:

if( is_page( id_array_function(\'About\') ) ) { 
  // Function would return array as (\'About\', \'Our Company\', \'Careers\', \'etc...\')
  // If current page is in array, do this
}
我曾尝试使用wp\\u list\\u页面(无法返回,只有echo)和get\\u posts/get\\u terms(都返回了空数组)进行此操作。如果有人对我如何实现可重用功能有一个现成的代码片段或想法,我将非常感谢您的帮助。

==========

编辑:下面是Krzysiek的工作答案。CSS技巧上可能的替代选项(针对ID):https://css-tricks.com/snippets/wordpress/if-page-is-parent-or-child/

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好的,我们要实现的是编写一个函数,该函数将获取页面的标题,并返回包含其ID及其子级ID的数组。下面是代码:

function get_page_and_its_children_ids_by_title( $page_title ) {
    $result = array();

    $page = get_page_by_title( $page_title );  // find page with given title
    if ( $page ) {  // if that page exists
        $result[] = $page->ID;  // add its ID to the result
        $children = get_children( array(  // get its children 
            \'post_parent\' => $page->ID,
            \'post_type\'   => \'page\', 
            \'numberposts\' => -1,
            \'post_status\' => \'publish\' 
        ) );
        $result = array_merge( $result, array_keys( $children ) );  // add children ids to the result
    }

    return $result;
}