web-dev-qa-db-ja.com

ページ属性のメニューで親ページを選択するために表示されるページを制限するにはどうすればいいですか?

私はたくさんのページがあるサイトを持っています。親ページを選択するためにメニューに表示したいページだけを表示する方法があるかどうかを知りたいのですが。

それらの多くは子ページなので、親ページのメニューに含める必要はありません。

誰もがそれを行う方法を知っていますか?

3
nagato saitou

このメタボックスはpage_attributes_meta_boxで印刷され、親を選択するための選択フィールドはこのコードで生成されます。

if ( is_post_type_hierarchical( $post->post_type ) ) :
    $dropdown_args = array(
        'post_type'        => $post->post_type,
        'exclude_tree'     => $post->ID,
        'selected'         => $post->post_parent,
        'name'             => 'parent_id',
        'show_option_none' => __('(no parent)'),
        'sort_column'      => 'menu_order, post_title',
        'echo'             => 0,
    );

    $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post );
    $pages = wp_dropdown_pages( $dropdown_args );
    if ( ! empty($pages) ) :
?>
<p class="post-attributes-label-wrapper"><label class="post-attributes-label" for="parent_id"><?php _e( 'Parent' ); ?></label></p>
<?php echo $pages; ?>

ご覧のとおり、関数 wp_dropdown_pages がそこで使用されており、呼び出しの引数を変更するためにpage_attributes_dropdown_pages_args filterを使用できます。

そこで、トップレベルのページだけをそこに入れたいとしましょう。

function wpse_modify_parent_dropdown_args($args, $post) {
    $args['depth'] = 1;
    return $args;
}
add_filter( 'page_attributes_dropdown_pages_args', 'wpse_modify_parent_dropdown_args', 10, 2 );
2