サイト内検索
Cocoonフォーラム
書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
Topic starter
2021年9月18日 19:48
他の方から「カルーセルが表示されない」とご相談を受けて気が付いた不具合です。
Cocoon設定>カルーセルの「最大表示数」を少なめ(例えば12)に設定し、「表示内容」の「人気記事」にチェックを入れ、「カテゴリー」でいくつかのみにチェックを入れた場合、カルーセルが表示されない場合があります。
「最大表示数」はtmp/carousel.phpの
$args = array( 'category__in' => get_carousel_category_ids(), 'tag__in' => get_carousel_tag_ids(), 'orderby' => get_carousel_orderby(), //ランダム表示 'no_found_rows' => true, 'posts_per_page' => get_carousel_max_count(), );
の他、
$limit = get_carousel_max_count(); $records = get_access_ranking_records($days, $limit);
で使われています。
最大表示数を12に設定した場合、$recordsの中にはサイト全体から期間中の閲覧数上位12記事のIDが入ります。
そしてその12記事は
$args += array('post__in' => $post_ids);
でクエリのパラメータに加えられます。
例えば上位12記事が全て「カテゴリーA」に含まれる記事で、カルーセルで表示したいのが「カテゴリーB」であった場合、記事が取得されずカルーセルが表示されません。
13番目に人気の記事が「カテゴリーB」の可能性もあるため、get_access_ranking_recordsで取得する記事の数は「最大表示数」よりも多い必要があるのではないかと思います。
解決策として思い浮かぶのは…
- $limitの値を固定値で大きくする(今回のご相談では$limitを100に設定して暫定的に対応しました)
- $limitを設定できるような設定項目を作る
- get_access_ranking_recordsで記事を取得できているにも関わらず最終的な記事数が最大表示数に満たなければ$limitの数を増やして再試行する
- カテゴリーの絞り込みは$argsでなくget_access_ranking_recordsの引数の方で行う(ただしタグでの絞り込みはできない)
とかでしょうか…。
あと思ったのは、カルーセルについては「アーカイブに出力しない」の設定が反映されないなと思いました。
アーカイブではないので仕様通りな気もしますが。
わいひら reacted
2021年9月19日 19:20
とりあえず、$limitを10倍するということで対応していました。
https://github.com/yhira/cocoon/commit/f81a6bd2fc768ad9d23db75a5c0dbf2c39b93a0b#
とはいえ、選択されているカテゴリに人気記事がなければ表示されないことには変わりはないかもしれません。
もとはといえば、category__inとtag__inとpost__inがAND検索されてしまうのが原因ですね…。
OR検索できれば良いのですが、調べた限りではやり方がわかりませんでした。
カテゴリーと、タグだけなら、以下のような感じでOR検索できそうなんですが、post__inも合わせるとなると、ちょっとわかりませんでした。。
$args = array( // 'category__in' => get_carousel_category_ids(), // 'tag__in' => get_carousel_tag_ids(), 'orderby' => get_carousel_orderby(), //ランダム表示 'no_found_rows' => true, 'posts_per_page' => get_carousel_max_count(), 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => get_carousel_category_ids(), 'operator' => 'IN', ), array( 'taxonomy' => 'post_tag', 'field' => 'id', 'terms' => get_carousel_tag_ids(), 'operator' => 'IN', ), ), );
Topic starter
2021年9月19日 20:06
ご対応ありがとうございます。
今回のご相談への対応は$limitを10倍でとりあえず大丈夫そうです。
- カテゴリーの絞り込みは$argsでなくget_access_ranking_recordsの引数の方で行う(ただしタグでの絞り込みはできない)
の方向で、
$args = array( //category_inを削除 'tag__in' => get_carousel_tag_ids(), 'orderby' => get_carousel_orderby(), //ランダム表示 'no_found_rows' => true, 'posts_per_page' => get_carousel_max_count(), ); //人気記事が有効の場合 if ( is_carousel_popular_posts_enable()) { $days = get_carousel_popular_posts_count_days(); $limit = intval(get_carousel_max_count()) * 10; $records = get_access_ranking_records($days, $limit, 'post', get_carousel_category_ids());//カテゴリーで絞り込み $post_ids = array(); //取得した投稿IDをセット foreach ($records as $post) { $post_ids[] = $post->ID; // 配列に追加 } $args += array('post__in' => $post_ids); } else { //人気記事じゃない場合 $args += array('category__in' => get_carousel_category_ids()); }
はいかがですか?
わいひら reacted
2021年9月20日 19:26
なるほど。
そういう引数があるのすら忘れていました。
こちらの方が多く記事がヒットしそうですね。なので、x10 を x5にしておきました。
x10でも良いのですが、最大値が120ということを考えると、少し減らしておきたくて。
https://github.com/yhira/cocoon/commit/fe0331c086d17f43813089d6d711ff3c4901cf51#diff-f6ffb928dd6c9692a0d50de13d6145cedeeda073a906a65703a98baefd13cffeR23
はる reacted
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。