如何在wp_Dropdown_Pages列表中显示草稿?

时间:2016-09-22 作者:yyyyyyyyyyyyyyyyy

我正在使用wp_dropdown_pages 在我的网站的后端,根据一组特定的标准生成一个页面列表。

列表仅显示published posts 我希望它显示两个已发布的帖子and drafts.

我在标准wordpress下拉列表中找到了其他堆栈交换线程,它们显示了如何实现这一点,但这似乎没有扩展到wp_dropdown_pages.

我用来在标准下拉列表中显示草稿的是:

<?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;
    }
?>
上述方法非常有效。对于使用wp_dropdown_pages. 为了澄清,在后端,我使用以下代码生成了一个下拉列表:

<?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 );
?>
上面生成的页面下拉列表完全符合我的要求,只是没有草稿。

2 个回复
最合适的回答,由SO网友:Ahmed Fouad 整理而成

更新

您似乎可以直接使用WP功能完成此操作wp_dropdown_pages() 正如birgire在下面的回应中指出的那样:https://wordpress.stackexchange.com/a/240275/102371

此解决方案较长,并使用get\\u posts()获取特定的帖子状态。

$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>\';

SO网友:birgire

您应该能够使用

\'post_status\' => \'publish,draft\',
在中wp_dropdown_pages() 因为它是get_pages() 支持post_status 具有以逗号分隔的post状态类型列表的参数。

About the documentation of get_pages():

它看起来像post_status 的参数get_pages() 不够准确。上面写着:

* @type string  $post_status  A comma-separated list of post statuses types to include.
但它实际上也支持数组,因此我们可以编写:

\'post_status\' => [ \'publish\', \'draft\' ],
我把票归档了#38136 解决这个问题。