サポート » 使い方全般 » カテゴリーページにおいて特定のカスタム投稿タイプのみ表示

  • 解決済 odmodm

    (@odmodm)


    とあるサイトにてカスタム投稿タイプにカスタムタクソノミーではなく通常のカテゴリーを適用しており、
    現状ではカテゴリーページにて通常の投稿とカスタム投稿タイプ[hoge]のものが一緒に表示されます。

    これをカテゴリページへアクセスする際に?post_type=hogeといった形でパラメータを持たせて、
    アクションフックpre_get_postにおいて分岐させることで表示を分けようと考え下記コードを記述しているのですが、
    post_type=hogeのパラメータを持った状態でカテゴリページにアクセスするとほかのカテゴリーの記事まで表示されてしまいます。
    別のサイトではこの方法でうまく表示されているのでコード自体には問題ないと思うのですが、どこから原因を探っていいのか全くわからない状態で困っておいる次第です。
    もしどなたか原因を探る方法や手掛かりになることをご存知でしたら教えていただけると助かります。

    
    function custom_pre_get_posts( $wp_query ) {
    	if ( ! is_admin() && $wp_query->is_main_query() ) {
    		if ( $wp_query->is_category() ) {
    			if( isset($_GET['post_type']) && !empty($_GET['post_type']) ){
    				$post_type = trim($_GET['post_type']);
    				$wp_query->set( 'post_type', $post_type );
    			}
    		}
    	}
    }
    add_action( 'pre_get_posts', 'custom_pre_get_posts' );
    
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは、

    コードを拝見しただけで、テストはしていませんが

    wp-includes/class-wp.phpの

    $public_query_vars や $private_query_vars に含まれるクエリーストリングは使わないようにしたほうがいいのではないかと思います。

    
    post_type=hoge
    

    余計なことかもしれませんが、

    $_GETよりは、以下のようなやり方がいいと思います。

    http://php.net/manual/ja/function.filter-input.php

    テンプレート階層
    site_url/?post_type=hogeはテンプレートとして
    archive-hoge.phpかarchive.phpを呼び出すとかじゃないですか。
    仮にカテゴリー限定したいなら、
    site_url/?cat=数字で
    category.phpとか、あとリンク参照とか呼び出さないとだめなんじゃないでしょうか。
    意図するところは
    site_url/?cat=数字&post_type=hogeとかじゃないでしょうか。

    トピック投稿者 odmodm

    (@odmodm)

    お二方の助言を基に無事に解決する事ができました。

    oisit様の仰る通り、archive-hoge.phpが読み込まれておりました。
    パラメータをpost_typeからp_typeに変更したところ、category.phpが
    読み込まれるようになりました。

    nobita様の仰るようにWordPressが使用するクエリ―ストリングは使用しないよう心掛けたいと思います。

    本当に助かりました。
    ありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カテゴリーページにおいて特定のカスタム投稿タイプのみ表示」には新たに返信することはできません。