私は自分のサイトのバックエンドでwp_dropdown_pages
を使って特定の基準に従ってページのリストを生成しています。
リストには、公開された投稿のみが表示され、両方の公開された投稿を表示したいドラフト。
標準のワードプレスのドロップダウンでこれを達成する方法を示す他のStack Exchangeスレッドを見つけましたが、これは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 );
?>
上の例では、下書きなしで、私が望む通りのページのドロップダウンリストを生成します。
Birgireが以下の彼の回答で指摘しているように、WP function wp_dropdown_pages()
で直接これを行うことができるようです: https://wordpress.stackexchange.com/a/240275/ 102371
この解決方法はもっと長く、get_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 . '"> ' . get_the_title( $subpage->ID ) . '</option>';
}
}
echo '</select>';
あなたは使えるはずです
'post_status' => 'publish,draft',
wp_dropdown_pages()
では、get_pages()
のラッパーであるため、ポストステータスタイプのカンマ区切りのリストを持つpost_status
引数をサポートします。
get_pages()
のドキュメントについて:
get_pages()
のpost_status
引数に関するドキュメントは十分正確ではないようです。それは言います:
* @type string $post_status A comma-separated list of post statuses types to include.
しかし実際には配列もサポートしているので、次のように書くことができます。
'post_status' => [ 'publish', 'draft' ],
私はそれに対処するためにチケット #38136 を提出しました。