WordPress でアーカイブページよりも固定ページを優先する方法

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() 部分を呼び出すかどうかを制御してください。

 

pagetop