WordPress でカスタム投稿タイプを使っている際に、その一覧ページのURLは {サイトURL}/{カスタム投稿タイプのスラッグ} となり、このページはテンプレートから自動生成されます。このURL で出力されるページを固定ページとして管理したい場合があります。例えば、コンテンツを投稿画面から編集したい場合です。
その場合は functions.php に以下のコードを追加すると実現できます。
function my_pre_get_posts( $query )
{
if ( is_admin() || ! $query->is_main_query() ) {
return $query;
}
// 対象とする投稿タイプを限定したい場合
$post_type = $query->get( 'post_type' );
if ( ! in_array( $post_type, array( '投稿タイプのスラッグ1', '投稿タイプのスラッグ2' ) ) ) {
return $query;
}
// 固定ページとして登録されているのであれば、固定ページとして扱うようにクエリを修正
global $wp;
if ( get_page_by_path( $wp->request ) ) {
$query->parse_query( "pagename={$wp->request}" );
}
return $query;
}
add_filter( 'pre_get_posts', 'my_pre_get_posts' );
$wp-request に URL のパス部分が入ってきますので、必要に応じて場合分けなどにより最後の $query->parse_query() 部分を呼び出すかどうかを制御してください。