Como posso mostrar rascunhos na lista wp_dropdown_pages?

4

Estou usando wp_dropdown_pages no back-end do meu site para gerar uma lista de páginas de acordo com um conjunto específico de critérios.

A lista mostra apenas postagens publicadas nas quais gostaria de exibir as postagens publicadas e rascunhos .

Encontrei outros encadeamentos do Stack Exchange que mostram como fazer isso nos menus suspensos padrão do wordpress, mas isso não parece se estender para wp_dropdown_pages .

O que estou usando para mostrar rascunhos nos menus suspensos padrão é este:

<?php
    /* Show drafts in dropdown lists */
    add_filter('page_attributes_dropdown_pages_args', 'my_attributes_dropdown_pages_args', 1, 1);
    add_filter('quick_edit_dropdown_pages_args', 'my_attributes_dropdown_pages_args', 1, 1);

    function my_attributes_dropdown_pages_args($dropdown_args) {
        $dropdown_args['post_status'] = array('publish','draft');
        return $dropdown_args;
    }
?>

O acima funciona muito bem. Eu gostaria de fazer exatamente a mesma coisa para campos personalizados gerados usando wp_dropdown_pages . Para esclarecer, no back-end, estou gerando uma lista suspensa usando o seguinte código:

<?php
    $dropdown_args_food = array(
        'depth'         => '2',
        'selected'      => $selectedFoodType,
        'post_type'     => 'page',
        'name'          => 'selected-food-type',
        'id'            => 'selected-food-type',
        'echo'          => 1,
        'meta_key'      => 'category',
        'meta_value'    => 'food',
        'hierarchical'  => 1,
        'show_option_none'      => ' ',
    );
    wp_dropdown_pages( $dropdown_args_food );
?>

O texto acima gera uma lista suspensa de páginas exatamente como eu quero, apenas sem rascunhos.

    
por yyyyyyyyyyyyyyyyy 22.09.2016 / 22:01

2 respostas

1

Atualizar

Parece que você pode fazer isso diretamente com a função wp_dropdown_pages() do WP, como aponta o birgire em sua resposta abaixo: enlace

Essa solução é mais longa e usa get_posts () para buscar status de postagem específicos.

$pages = get_posts( array( 'post_type' => 'page', 'post_parent' => 0, 'post_status' => array( 'draft', 'publish' ) ) );

echo '<select name="selected-food-type" id="selected-food-type">';
foreach( $pages as $page ) {
    echo '<option value="' . $page->ID . '">' . get_the_title( $page->ID ) . '</option>';
    $children = get_children( 'post_parent='. $page->ID );
    foreach( $children as $subpage ) {
        echo '<option value="' . $subpage->ID . '">&nbsp;&nbsp;&nbsp;' . get_the_title( $subpage->ID ) . '</option>';
    }
}
echo '</select>';
    
por Ahmed Fouad 22.09.2016 / 23:50
1

Você deve poder usar

'post_status' => 'publish,draft',

em wp_dropdown_pages() , pois é um wrapper para get_pages() que suporta o argumento post_status com uma lista separada por vírgula de tipos de status de postagem.

Sobre a documentação de get_pages() :

Parece que a documentação do argumento post_status de get_pages() não é exata o suficiente. Diz:

* @type string  $post_status  A comma-separated list of post statuses types to include.

Mas, na verdade, também suporta um array, então podemos escrever:

'post_status' => [ 'publish', 'draft' ],

Arquivei o ingresso # 38136 para resolver isso.

    
por birgire 23.09.2016 / 01:21