grayishスキン適用中

Cocoonフォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

不具合の発生手順:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法
  7. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

一部条件でカルーセルが表示されない
 
共有:
通知
すべてクリア

[解決済] 一部条件でカルーセルが表示されない

6 投稿
2 ユーザー
5 Likes
997 表示
はる
(@haruinoue)
Noble Member Moderator
結合: 4年前
投稿: 1059
Topic starter  

他の方から「カルーセルが表示されない」とご相談を受けて気が付いた不具合です。

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
わいひら
(@yhira)
Illustrious Member Admin
結合: 6年前
投稿: 16239
 

とりあえず、$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',
    ),
  ),
);

   
はる
(@haruinoue)
Noble Member Moderator
結合: 4年前
投稿: 1059
Topic starter  

ご対応ありがとうございます。

今回のご相談への対応は$limitを10倍でとりあえず大丈夫そうです。

投稿者:: @haruinoue
  • カテゴリーの絞り込みは$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
わいひら
(@yhira)
Illustrious Member Admin
結合: 6年前
投稿: 16239
 

なるほど。
そういう引数があるのすら忘れていました。
こちらの方が多く記事がヒットしそうですね。なので、x10 を x5にしておきました。
x10でも良いのですが、最大値が120ということを考えると、少し減らしておきたくて。
https://github.com/yhira/cocoon/commit/fe0331c086d17f43813089d6d711ff3c4901cf51#diff-f6ffb928dd6c9692a0d50de13d6145cedeeda073a906a65703a98baefd13cffeR23


   
はる reacted
はる
(@haruinoue)
Noble Member Moderator
結合: 4年前
投稿: 1059
Topic starter  

ありがとうございます。

前より問題が起こりにくいようになったと思います。


   
わいひら reacted
わいひら
(@yhira)
Illustrious Member Admin
結合: 6年前
投稿: 16239
 

ご確認いただきありがとうございます!


   
はる reacted
共有:

問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。

また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

タイトルとURLをコピーしました