コメント数が0のときにコメント数を非表示にする方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

以下の記事では、コメント数が0件の場合にエントリーカードのコメント数を非表示にする方法を紹介しています。

そこで今回は、「新着記事」「人気記事」「新着情報」の各ショートコードについても、同様にコメント数を非表示にします。

この記事では、この方法について説明します。

実装手順

以下のコードをfunctions.phpに追加します。

  • ラベル
    PHPを追加(エントリーカード)

    以下のコードをfunctions.phpに追加します。

    add_filter('entry_card_post_comment_count_visible', function ($is_visible, $count) {
      return (int) $count > 0 && $is_visible;
    }, 10, 2);
  • ラベル
    PHPを追加(新着記事、人気記事)

    以下のコードをfunctions.phpに追加します。

    /**
     * コメント数が0の場合にテンプレート引数のコメント表示フラグを無効化
     *
     * @param array $args テンプレートに渡される引数配列
     * @param int $post_id 投稿ID
     * @return array 引数配列
     */
    if (!function_exists('disable_zero_comment_args')):
    function disable_zero_comment_args($args, $post_id) {
      if ((int) get_comments_number($post_id) === 0) {
        $args['comment'] = false;
      }
    
      return $args;
    }
    endif;
    
    
    // テンプレート(新着記事カード)のパラメータを変更
    add_filter('cocoon_part_args__tmp/widget-entry-card', function ($args) {
      return disable_zero_comment_args($args, $args['post_id']);
    });
    
    
    // テンプレート(人気記事カード)のパラメータを変更
    add_filter('cocoon_part_args__tmp/popular-card', function ($args) {
      return disable_zero_comment_args($args, $args['popular_post']->ID);
    });

参考:「新着情報」も含める場合

前述の通り、「新着記事」や「人気記事」のカードはテンプレート化されているため、フックを用いてパラメータを簡単に変更できます。
しかし、「新着情報」はテンプレート化されておらず、同様のフックも存在しません。

そこで、「新着記事」や「人気記事」も合わせ、ショートコードから出力されたHTMLそのものを直接書き換えるアプローチをとります。

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('do_shortcode_tag', function ($output, $tag, $attr) {
  // 対象のショートコードでない場合
  if (!in_array($tag, ['info_list', 'new_list', 'popular_list'], true)) {
    return $output;
  }

  $patterns = [
    '/<span class="info-list-item-comment[^">]*"><span[^>]*><\/span>0<\/span>/s',
    '/<span class="new-entry-card-comment[^">]*"><span[^>]*><\/span>0<\/span>/s',
    '/<span class="popular-entry-card-comment[^">]*"><span[^>]*><\/span>0<\/span>/s',
  ];

  return preg_replace($patterns, '', $output);
}, 10, 3);

さいごに

今回紹介した方法を使えば、コメントがまだついていない記事の「0」という数字を非表示にして、サイトの見た目を一気にスッキリさせることができます。

エントリーカードだけでなく、「新着記事」ショートコードなども一括制御できるため、サイト全体のデザインの統一感を損なうこともありません。

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