フォーラムへの返信
-
投稿者投稿
-
お教えいただいた内容で実現できました!
追加でランダム表示の場合ページ遷移時にランダムで表示しなおしてしまうため、ページネーションにセッションを追加し制御しています。
いずれも、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; }
解決いたしましたので、トピックを閉じさせていただきます。
GONSYさま
早速のご回答ありがとうございます!
なるほど、、、
pre_get_postsでis_post_type_archive指定ですね。
テストしてまた報告いたします。♥ 0いいねをした人: 居ませんキタジマ タカシ さま
Olein_jp さまご案内下さいました内容で無事に読み込みできました。
私の方の勘違いのポイントとして
use Framework\Helper;
を宣言しておけば、my-snow-monkey.php上で
get_template_part()
はすべてsnow_monkey_template_part_root_hierarchy
をフックしてくれると思い込んでおりました。
get_template_part()
を\Framework\Helper::get_template_part()
とすることで
意図する動作になりました。ご対応ありがとうございました。
キタジマ タカシ さま
ご返信ありがとうございます。
フックを使うということは Snow Monkey のアップデートにより影響を受ける可能性もあります。テンプレートの追加や上書きをする場合は運用面を考えても子テーマのほうがシンプルだと個人的には思います。
なるほど、、承知しました。子テーマで対応するようにします。
具体例のページのご案内もありがとうございます。
そちらも確認して試してはみたものの、実現できず、、、勉強のために再度チャレンジしてみます。本件、またご相談させて頂くかもしれませんので、もう少しトピックはオープンのままとさせてください。
引き続き、よろしくお願い致します。
キタジマ タカシ さま
ご返信ありがとうございます。
snow_monkey_template_part_root_hierarchy
を利用してできるかも と思いつつ試してみたのですが、うまくいかず、Snow Monkey本体にあるテンプレートパーツの置き換えに使うフックかと思い込んでおりました、、、オリジナルファイルも行けるのですね!
構築の煩雑さは増しても、運用がシンプルにできればと思っておりまして極力、子テーマなしで構築したいと考えています。
snow_monkey_template_part_root_hierarchy
フィルターフックを利用して、
my-snow-monkey.php
上で
plugins\my-snow-monkey\override\template-parts\original\foo.php
を
get_template_part()
から呼び出す具体的なコードをお教えいただけないでしょうか。
※ファイル冒頭にuse Framework\Helper;
は追加済みです。また、特定のディレクトリ内のテンプレートパーツ呼び出し時のみMy Snow Monkeyのここのディレクトリを使ってね という事ができれば負荷も少なくて済みそうなのですが、そのような手法がありましたら、併せてお教えいただけると助かります。
※これができなくても$slug
でコツコツ追加していきます。♥ 0いいねをした人: 居ませんOlein_jp さま
ご返信ありがとうございます。用途としましては、WP 5.5から
get_template_part
にパラメーターが渡せるようになったので
ショートコードで動的にテンプレートパーツを読み込み、ブロックで構築 + 好きな場所にテンプレートパーツを挿入するためです。また、上書き用のディレクトリに配置しているのは、テンプレートパーツのファイルを同じ場所にまとめておきたいだけで、特に意味はありません。
単純にインポートするだけであれば
requre
とかでいけませんでしょうか?こちら、詳しくお伺いできますでしょうか。
また、本体アップデートでファイルが消失する旨も承知しております。
ご指摘ありがとうございます。♥ 0いいねをした人: 居ません -
投稿者投稿