¿Cómo puedo mostrar borradores en la lista wp_dropdown_pages?

4

Estoy usando wp_dropdown_pages en el backend de mi sitio para generar una lista de páginas según un conjunto específico de criterios.

La lista solo muestra publicaciones publicadas donde me gustaría mostrar tanto las publicaciones publicadas como los borradores .

He encontrado otros subprocesos de Stack Exchange que muestran cómo lograr esto en los menús desplegables de wordpress estándar, pero esto no parece extenderse a wp_dropdown_pages .

Lo que estoy usando para mostrar los borradores en los menús desplegables estándar es esto:

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

Lo anterior funciona muy bien. Me gustaría hacer exactamente lo mismo para los campos personalizados generados usando wp_dropdown_pages . Para aclarar, en el backend, estoy generando una lista desplegable con el siguiente 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 );
?>

Lo anterior genera una lista desplegable de páginas exactamente como quiero que sea, solo sin borradores.

    
pregunta yyyyyyyyyyyyyyyyy 22.09.2016 - 22:01

2 respuestas

1

Actualizar

Parece que puedes hacer esto directamente con la función WP wp_dropdown_pages() , tal como lo señala birgire en su respuesta a continuación: enlace

Esta solución es más larga y usa get_posts () para obtener estados de publicación 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>';
    
respondido por el Ahmed Fouad 22.09.2016 - 23:50
1

Debes poder utilizar

'post_status' => 'publish,draft',

en wp_dropdown_pages() , ya que es un contenedor para get_pages() que admite el argumento post_status con una lista separada por comas de tipos de estado de publicación.

Acerca de la documentación de get_pages() :

Parece que la documentación para el argumento post_status de get_pages() no es lo suficientemente precisa. Dice:

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

Pero en realidad también es compatible con una matriz, por lo que podemos escribir:

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

Presenté el ticket # 38136 para solucionarlo.

    
respondido por el birgire 23.09.2016 - 01:21

Lea otras preguntas en las etiquetas