カスタム投稿タイプを作成しました。管理ビューの[すべての投稿]ページで、すべての投稿タイプの投稿の組み合わせリストを指すURLを作成しようとしています。
http://<mysite>//wp-admin/edit.php?post_type=my_post_type
のように特定の投稿タイプの投稿を指すURLを作成できます。しかし、すべての種類の投稿を一覧表示する方法が見つかりません。
すべての投稿タイプの投稿を一覧表示するページを指すために/wp-admin/edit.php?post_type=
スラグを使用することは可能ですか?または、他にどのようにしてURLを作成することができますか?
これが機能する唯一の方法は WP_Query post_type paramsに基づいた?post_type=any
です。
しかしコンテキストは問題です。edit.php
ページには特定の投稿タイプが必要です。1つの $ post_type_object のみを表示および編集するには、各post_typeに対して1つの単一ラベル、1つの複数ラベル、その他多数の個別プロパティが返されます。
これらは技術的な問題をブロックするだけでなく、これを行うことを不可能にする概念的な問題でもあります。
個人的には、post_type=any
のようなクエリを使って、「カスタム管理ページを作成する方法」を調べます。
pre_get_posts
を$_GET
パラメーターとともに使用して、現在の投稿タイプにピギーバックすることができます-たとえば、all管理パネルで編集可能な投稿、パラメーターshowall=true
を追加し、すべての投稿タイプを表示できます。
/**
* Show all post editable post types
*
* @param WP_Query Object $query
*
* @return void
*/
function show_all_posttypes( $query ) {
if( ! is_admin() ) {
return;
}
if( isset( $_GET, $_GET['showall'] ) && true == $_GET['showall'] ) {
$query->set( 'post_type', 'any' );
}
}
add_filter( 'pre_get_posts', 'show_all_posttypes' );
何らかの方法で投稿タイプを制限する場合は、 get_post_types()
関数を使用して、返された投稿タイプをarray()としてpost_type
パラメーターに渡すことができます。
アクセスしやすいように、これをサブページの管理リンクとして追加することもできます。
/**
* Show All Post Types Link
* - Subpage of "All Pages"
*
* @return void
*/
function show_all_posttypes_link() {
add_submenu_page('edit.php?post_type=page', '', 'All Post Types', 'edit_posts', '/edit.php?post_type=page&showall=true');
}
add_action( 'admin_menu', 'show_all_posttypes_link' );
列出力などをカスタマイズするためにこれを何度も拡張し続けることができますが、これがその要点です。