はじめに
以下の記事では、コメント数が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」という数字を非表示にして、サイトの見た目を一気にスッキリさせることができます。
エントリーカードだけでなく、「新着記事」ショートコードなども一括制御できるため、サイト全体のデザインの統一感を損なうこともありません。

