カスタム投稿タイプのアーカイブページ(一覧ページ)で特定の記事を除外したい

0
いいねをした人: 居ません
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #128865
    アバター画像hoshiimo.run
    参加者
    3

    【お使いの Snow Monkey のバージョン】:18.2.0
    【お使いの Snow Monkey Blocks のバージョン】:17.2.0
    【お使いの Snow Monkey Editor のバージョン】:9.1.1
    【お使いのブラウザ】:chrome
    【当該サイトのURL】:-

    ### 実現したいこと

    カスタム投稿タイプのアーカイブページ(一覧ページ)で特定の記事を除外する方法について教えて頂きたいです。

    具体的には、各記事に設定したカスタムフィールドで「一覧に表示させる?」を真偽値で入力し、その結果に応じて、一覧ページへの表示を出し分けたいと考えています。

    ### 発生している問題

    サブクエリの情報を書き換えられない

    ### 試したこと

    以下のページを参考に、snow_monkey_get_template_part_args_template-parts/common/entries/entries/postsフックを使用して、まずはサブクエリの表示をカスタマイズしようと試みました。

    ※本来の目的は、カスタムフィールドの値により特定の記事の表示を除外することですが、posts_per_pageで試しにやってみました

    $args['vars']['_posts_query']->set( 'posts_per_page', 5)
    

    しかし、これではサブクエリが上書きされませんでした。

    回答するために不足する情報等があれば返信ください。

    以上、宜しくお願いします。

    0
    いいねをした人: 居ません
    #128886
    アバター画像キタジマ タカシ
    参加者
    2260

    「カスタム投稿タイプのアーカイブページ(一覧ページ)」というのはメインクエリのことかな?と思ったのですが、発生している問題には「サブクエリの情報を書き換えられない」とあり、ちょっと状況がよくわかりませんでした。

    もし最近の投稿ブロックなどのサブクエリなブロックを使っているのでなく、カスタム投稿タイプのアーカイブページに表示されている普通の記事一覧部分をカスタマイズしたいということであれば、WordPress コアのフックである pre_get_posts を使うのが良いのではないかなと思いました。

    1
    いいねをした人:
    #128893
    アバター画像hoshiimo.run
    参加者
    3

    北島様

    ご回答ありがとうございます。

    仰る通り、メインクエリですね…。すみません勘違いしていました。

    以下のコードをpre_get_postsフックで記載したら実装できました!

    function exclusionFromList($query)
    {
    	if (is_admin() || ! $query->is_main_query()) {
    		return;
    	}
    	if(is_post_type_archive('custom-post')){
    		$query->set( 'meta_key', 'list_display');
    		$query->set( 'meta_value', true);
    		$query->set( 'meta_compare', '=');
    	}
    }
    add_filter('pre_get_posts', 'exclusionFromList');

    やりたいことはできたのですが、上記のコードを作成する過程で分からないことがあったので、教えて頂けると幸いです。

    最初は、以下のようなコードを作成しましたが、これではうまくいきませんでした。(絞り込みはできず、全件表示されてしまいました)

    function exclusionFromList($query)
    {
    	if (is_admin() || ! $query->is_main_query()) {
    		return;
    	}
    	if(is_post_type_archive('custom-post')){
    		$query->set( 'meta_query',
    			array(
    				'key' => 'list_display',
    				'value' => true,
    				'compare' => '='
    			)
    		);
    	}
    }
    add_filter('pre_get_posts', 'exclusionFromList');

    後者のコードで絞り込みができない理由が分かりません…。

    何か思い当たるところはありますでしょうか?

    0
    いいねをした人: 居ません
    #128925
    アバター画像キタジマ タカシ
    参加者
    2260

    array がもう一つ深くないとダメだったりしませんかね?

    $query->set(
    	'meta_query',
    	array(
    		array(
    			'key'     => 'list_display',
    			'value'   => true,
    			'compare' => '=',
    		),
    	),
    );
    0
    いいねをした人: 居ません
    #128927
    アバター画像hoshiimo.run
    参加者
    3

    北島様

    有難うございます。

    階層を深くしても結果は変わらずでした…。

    試しにvar_dump()で確認してみたら、コード自体は認識されているようでした。

    object(WP_Query)[2979]
    ~省略~
    public ‘query_vars’ =>
    array (size=54)
    ~省略~
    ‘meta_query’ =>
    array (size=1)
    0 =>
    array (size=3)
    ‘key’ => string ‘list_display’ (length=12)
    ‘value’ => boolean true
    ‘compare’ => string ‘=’ (length=1

    0
    いいねをした人: 居ません
    #128961
    アバター画像キタジマ タカシ
    参加者
    2260

    うーん、なんでしょうね…。実際に実行される SQL が meta_key meta_value を指定したときと、配列で指定したときでどう違うのかを見てみるとなにかわかるかも…。

    1
    いいねをした人:
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタム投稿タイプのアーカイブページ(一覧ページ)で特定の記事を除外したい」には新しい返信をつけることはできません。

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。