下記のような方法があります。
カスタムメニューを表示する関数 wp_nav_menu の中で、メニューのHTMLを生成する関数 walk_nav_menu_tree を使っており、さらにその中でメニュー項目一つのHTMLを生成する度にフィルターフック walker_nav_menu_start_el が呼び出されます。このフィルターフックを使って、リンク(HTMLの a タグ)を取り除きます。
walker_nav_menu_start_el
の使い方は、例えばこのフォーラムの過去トピックが参考になると思います。
下記のコードで試してみたところ、投稿数ゼロのときだけリンク無しにできました。
function my_nav_menu_start_el( $content, $item ) {
// "nav_menu_item" == $item->post_type
if ( "category" == $item->object ) {
$count = get_category( $item->object_id )->count;
if ( $count < 1 ) {
$content = strip_tags( $content );
}
$content .= " ($count)";
}
return $content;
}
add_filter( 'walker_nav_menu_start_el', 'my_nav_menu_start_el', 10, 2 );
早速の回答本当に有難うございました。
教えていただいたコードを追加して、投稿数のあるカテゴリのみリンクが設定されました。
phpに詳しくなく、大変恐縮なのですが、カテゴリの横に表示される投稿数を表示しない為にはどうすれば良いでしょうか?重ね重ねお手数をお掛け致します。
yoshi2214さん
phpに詳しくなく、大変恐縮なのですが、カテゴリの横に表示される投稿数を表示しない為にはどうすれば良いでしょうか?
ぜひ、少しだけphpを学んでください。以下、ヒントです。
- 上記のコードを実行すると、元のリンクの「後ろに」投稿数が付きます。
- phpのコードで
$何々
は「変数」というものです。投稿数を入れた変数なら、その変数の値がゼロだったりゼロでなかったりします。
- 変数は、値として数値を入れることも、文字列を入れることもできます。
- phpのコードで「変数Aに入っている文字列」の「後ろ」に「別の文字列」を「繋げる」という操作を
$A .= 別の文字列;
と書きます。
- ダブルクォートで囲んだ内側は、文字列として扱われます。
- ダブルクォートで囲んだ中に「変数」が出てきた場合、例えば
$A
の値が XYZ
のとき "<$A>"
は "<XYZ>"
と書いたのと同じです。
これをヒントに .=
という書き方に絞って調べてみてください。
度々、ご親切に回答を有難うございます。(深夜に関わらず申し訳ありません。)
最初、代入文自体を削除したのですが、更新後、エラーが表示され続けて、再質問させていただきました。
改めて、同じように
$content .= ” ($count)”;
を削除した所、投稿件数は表示されなくなりました。(これで良かったのでしょうか?)
最初の修正時に、空白か何か入れていたようです。失礼しました。
本当に有難うございました。