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カスタマイズ依頼

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

関連記事の関連付けオプション追加
 
共有:
通知
すべてクリア

関連記事の関連付けオプション追加

5 投稿
3 ユーザー
3 Reactions
341 表示
 YSYK
(@ysyk)
Active Member Registered
結合: 2年前
投稿: 5
トピックスターター  

Cocoon設定の関連記事設定における表示方法について、
以下のようにオプションを追加してほしいという要望です。

たとえば
「関連性」に「カテゴリー」を選択していて、表示数に「6」を指定している場合

■現状
・投稿記事の他に同一カテゴリーの記事が1つもない場合、共通するタグの記事が6つ表示される

・投稿記事の他に同一カテゴリーの記事が他に1つある場合(カテゴリー内の合計は2つ)、共通するタグの記事が他に5つ以上あっても、表示されるのは同一カテゴリーの1つのみ。
→特に表示タイプ「縦型カード」を選択していると5記事分の隙間が空いてしまう

■要望
・投稿記事の他にある同一カテゴリーの記事が表示数に満たない場合、表示数の分まで共通するタグの記事を追加で表示するというオプションの追加。

関連性にカテゴリーを選択している場合は優先的に同一カテゴリーの関連記事がすべて表示され、表示数に足りない分だけを共通タグの記事で補うという形です。

共通タグの記事で表示数までの補完をしたいかどうかは、チェックボックスでのオプション制などで選択できれば他の管理者にも悪影響がないかなと思います。


   
引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3356
 

●補足

lib/related-entries.php

  • 自身の投稿ページは除く。
  • 関連記事は、ランダムで取得する。
  • [Cocoon設定]→投稿→関連性「カテゴリー」「タグ」の設定に応じ、同じカテゴリーか、タグで絞り込む。
    (category__inかtag__inを設定)
  • 関連性「カテゴリー」でカテゴリー数=0の時、タグで絞り込む。
  • 関連性「タグ」でタグ数=0の時、カテゴリーで絞り込む。

●課題

変更前、設定されたパラメータを元に、WP_Query任せで該当投稿を取得している。

変更後、表示数とする為、post__inに、該当の関連投稿IDを列挙する必要がある。
この為、一旦、記事を取得し、表示数分あるかチェックする必要が生じる。

結構、面倒臭いですね。


   
わいひら reacted
返信引用
わいひら
(@yhira)
Illustrious Memberサイト Admin
結合: 7年前
投稿: 17559
 

個人的に以下の理由から機能を実装する労力の割には、効果の薄い機能のように感じています。

・クリック計測などで見ても、もともと関連記事はほとんどクリックされない
・WP_Queryのorderbyパラメーターには、カテゴリ(もしくはタグ)を優先する機能はないので独自コードで実装する必要がある(WP_Query任せにできない)
・実装するとしたら、post__inパラメーターでカテゴリ(もしくはタグ)を優先するように並び替える必要がある(post__inで並べるためにWP_Queryを二回実行する必要がある?)
・複雑化するので、コードの保守性が下がる
・オプションも増えるので、設定がややこしく感じる方が増える可能性

以上のことから、恐れ入りますが、機能化することはないかもしれません。
実装することで、サイト内回遊率が何%かでも上がるということであれば、ありなのかもしれませんが、これまでのサイト運営経験上、そこまでの効果はないように思います。


   
返信引用
 YSYK
(@ysyk)
Active Member Registered
結合: 2年前
投稿: 5
トピックスターター  

ご検討いただきありがとうございます。

思っていたより複雑なことだったようで、
機能化が現実的でない以上は他の方法で補うことを考えようと思います。


   
わいひら reacted
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3356
 

●仕様の問題点

タグで補っても、タグ数がカード表示数に満たなけれ、表示数分とならない。


●ご参考

[投稿]の関連性の注記の動作、get_additional_related_wp_query_argsで、カテゴリー、タグの切り替え分かり難く。
上記の試作を兼ね、以下のようにしてみました。
先述の通り、複数回、クエリ処置させカードを表示します。

現在、tmp/related-list.phpでWP_Queryのパラメータに応じカード出力している。
これを止め、tmp/related-list.phpは、単に設定された投稿IDをカード出力する。

  1. あらかじめカテゴリー、タグの投稿IDをおのおの取得。
  2. [投稿]→[関連性」に応じ、カテゴリー・タグ順または、タグ・カテゴリー順でpost__in配列を作成。
    これにより、タグが無い場合、配列の先頭にカテゴリーに該当する投稿IDが並ぶ。
  3. 配列の先頭から表示数分の投稿IDがカード出力するので、結果、設定画面の注記の関連順となる。
if (!function_exists('get_related_wp_query_args')):
function get_related_wp_query_args(){
  global $post;
  if (!$post) {
    $post = get_random_posts(1);
  }

  // 除外投稿
  $exclude_post_ids = get_archive_exclude_post_ids();
  if ($exclude_post_ids && is_array($exclude_post_ids)) {
    foreach ($exclude_post_ids as $exclude_post_id) {
      if (isset($args['post__not_in']) && is_array($args['post__not_in'])) {
        array_push($args['post__not_in'], $exclude_post_id);
      }
    }
  }

  if ($post && isset($post->ID)) {
    $args = get_common_related_args($post->ID);

    // カテゴリーに基づくクエリ
    $args['category__in'] = get_the_category_ids($post->ID);
    $cat_query = new WP_Query($args);

    // タグにに基づくクエリ
    unset($args['category__in']);
    $args['tag__in'] = get_the_tag_ids($post->ID);
    $tag_query = new WP_Query($args);
  }

  // クエリ結果をpost__inに設定
  unset($args['category__in'], $args['tag__in']);
  
  if (is_related_association_type_category()) {
    $args['post__in'] = array_merge(
      wp_list_pluck($cat_query->posts, 'ID'),
      wp_list_pluck($tag_query->posts, 'ID')
    );
  } else {
    $args['post__in'] = array_merge(
      wp_list_pluck($tag_query->posts, 'ID'),
      wp_list_pluck($cat_query->posts, 'ID')
    );
  }
  return $args;
}
endif;

   
わいひら reacted
返信引用
共有:

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

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

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

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

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

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

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

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