web-dev-qa-db-fra.com

Comment limiter les pages affichées pour choisir la page parente dans le menu de l'attribut de page?

J'ai un site avec beaucoup de pages. J'aimerais savoir s'il existe une méthode permettant d'afficher uniquement les pages que je souhaite afficher dans le menu pour choisir la page parent.

Beaucoup d'entre elles sont des pages enfants et je n'ai pas besoin qu'elles soient dans le menu de la page parent.

Est-ce que quelqu'un sait comment le faire?

3
nagato saitou

Cette méta-boîte est imprimée avec page_attributes_meta_box et le champ de sélection pour choisir le parent est généré avec ce code:

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; ?>

Comme vous pouvez le voir, la fonction wp_dropdown_pages est utilisée ici et vous pouvez utiliser le filtre page_attributes_dropdown_pages_args pour modifier les arguments de son appel.

Alors disons que vous ne voulez que des pages de premier niveau:

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