特定のカスタム投稿のアーカイブページで記事一覧をランダム表示したい

0
いいねをした人: 居ません
  • このトピックには3件の返信、2人の参加者があり、最後にcojiにより2年、 11ヶ月前に更新されました。
4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #92912
    coji
    閲覧者
    7

    【お使いの Snow Monkey のバージョン】15.16.0
    【お使いの Snow Monkey Blocks のバージョン】13.4.0
    【お使いの Snow Monkey Editor のバージョン】6.2.1
    【お使いのブラウザ】Chrome 96.0.4664.45(Official Build)
    【当該サイトのURL】構築中

    ### 実現したいこと
    ・特定のカスタム投稿のアーカイブページで記事一覧をランダム表示したい
    ・特定のカスタム投稿のアーカイブページで1ページあたりに表示する投稿数を変更したい

    ### 発生している問題
    特になし
    ### 試したこと
    フォーラムでの検索

    0
    いいねをした人: 居ません
    #92917
    GONSY
    参加者
    841

    こんばんは。

    上記のトピックにをヒントに、先日、pre_get_postsを使って、カスタム投稿タイプのアーカイブをランダム表示させました。
    これに別のカスタム投稿タイプのアーカイブの表示数を変更できるようにアレンジを加えたのが以下です。

    my-snow-monkey.phpもしくは、子テーマのfunctions.phpに記述してください。

    add_action(
    	'pre_get_posts',
    	function( $query ) {
    		if ( is_admin() || ! $query->is_main_query() ){
    			return;
    		}
    
    		// カスタム投稿タイプ「pt_a」のアーカイブのみ
    		if ( is_post_type_archive('cpt_a') ) {
    			$query->set( 'orderby', 'rand' ); // 表示順:ランダム
    		}
    
    		// カスタム投稿タイプ「pt_b」のアーカイブのみ
    		if ( is_post_type_archive('cpt_b') ) {
    			$query->set( 'posts_per_page', '6' ); // 表示数:6
    		}
    			
    	},
    	1
    );

    これで実現できると思いますが、まずはローカル環境などでお試しくださいませ。

    3
    いいねをした人:
    #92927
    coji
    閲覧者
    7

    GONSYさま

     

    早速のご回答ありがとうございます!

    なるほど、、、
    pre_get_postsでis_post_type_archive指定ですね。
    テストしてまた報告いたします。

    0
    いいねをした人: 居ません
    #92938
    coji
    閲覧者
    7

    お教えいただいた内容で実現できました!

    追加でランダム表示の場合ページ遷移時にランダムで表示しなおしてしまうため、ページネーションにセッションを追加し制御しています。
    いずれも、my-snow-monkey.phpもしくは、子テーマのfunctions.phpに記述しています。

    ■ご教示頂いたコード

    add_action(
    'pre_get_posts',
    function( $query ) {
    if ( is_admin() || ! $query->is_main_query() ){
    return;
    }
    
    // カスタム投稿タイプ「pt_a」のアーカイブのみ
    if ( is_post_type_archive('cpt_a') ) {
    $query->set( 'orderby', 'rand' ); // 表示順:ランダム
    }
    
    // カスタム投稿タイプ「pt_b」のアーカイブのみ
    if ( is_post_type_archive('cpt_b') ) {
    $query->set( 'posts_per_page', '6' ); // 表示数:6
    }
    
    },
    1
    );

    ■追加したコード
    ※書き込み時にエラーが発生してしまうため、一部全角で記載しております。

    add_filter('posts_orderby', 'edit_posts_orderby', 10, 2);
    
    function edit_posts_orderby($orderby_statement) {
    
      // セッションが開始されていなければここで開始
      if( session_status() !== PHP_SESSION_ACTIVE ) {
          session_start();
      }
      $pgn = $_SESSION['pgn'];
      if (empty($pgn)) {
        $pgn = rand();
        $_SESSION['pgn'] = $pgn;
      }
    
      $orderby_statement = 'RAND('.$pgn.')';
      return $orderby_statement;
    
    }

    解決いたしましたので、トピックを閉じさせていただきます。

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

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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