sitemapショートコード
Cocoonではサイトマップを"[sitemap]"と書くだけで表示する便利なショートコードがある。
参考 簡単なサイトマップページを生成できるsitemapショートコードの使い方 | Cocoon
ワードプレスの勉強がてら、このショートコードをコピペ改造してみた。
1. ソースを読む
オリジナルのsitemapショートコードのソースは以下のsitemap_shortcode関数だ
参考 https://github.com/yhira/cocoon/blob/master/lib/shortcodes.php#L387
知らない処理をググって調べた見た
ob_start() / return ob_get_clean()
これは結果の出力をキャッシュする操作のようだ。これをしないと、目次がうまく表示されなかったりするみたい
参考 PHPのob_startでまとめて結果出力
<?php _e( 'ほげほげ', THEME_NAME ) ?>
これは国際化(日本語以外でも表示)処理用の書き方のようだ。
THEME_NAMEはCocoonで以下のように定義されている。
define('THEME_NAME', 'cocoon');
練習で作るショートコードではこれは無視でいいかな。
参考 関数リファレンス/ e - WordPress Codex 日本語版
テンプレート関数
wp_list_pages
wp_get_archives
wp_list_categories
wp_get_archives
このあたりを呼び出して簡単に表示している。
2. 改造する
カテゴリーと月別アーカイブに件数表示を追加。あと、タグ一覧も表示するように改造してみた。
カテゴリーに件数表示
wp list categoriesで引数show_count=trueを渡すと件数が表示される。
<?php wp_list_categories('show_count=true&title_li='); ?>
↓
こんな感じでカッコで件数が付く
カテゴリー1(10) カテゴリー2(5)
月別アーカイブに件数表示
月別アーカイブの件数表示も似た感じ。wp get archivesで引数show_post_count=trueを渡すと件数が表示される。
<?php wp_get_archives('type=monthly&show_post_count=true'); ?>
カッコが消える処理の対処
Cocoonではウィジット上での件数表示のスタイルのために、このカッコを除去する処理が行われている。
参考 投稿数に付加されるカッコを除去するカスタマイズ方法
add_filter( 'wp_list_categories', 'remove_post_count_parentheses' ); add_filter( 'get_archives_link', 'remove_post_count_parentheses' );
style.cssにうまいこと記述するとキレイに表示されるようだが、固定ページ上で試してるためか?何だかうまくいかなかったので、とりあえず自分が利用するサイトマップページ上では、この処理を無効ににしてカッコが表示されるように戻してみた↓かなり場当たり的な対処な気はする。
remove_filter( 'wp_list_categories', 'remove_post_count_parentheses' ); remove_filter( 'get_archives_link', 'remove_post_count_parentheses' );
タグ一覧の表示
タグ一覧は上のソースコードにないので、他からサンプルを拾ってきた。
一番簡単そうなのは、wp_tag_cloud()の引数にformat=list(リスト表示)、show_count=true(件数表示)とかすれば表示される
<?php wp_tag_cloud('format=list&show_count=true&smallest=11&largest=11'); ?>
だが、この方法だと何か他の一覧と見栄えが違う(文字の大きさだけじゃなくてスタイルが違う?)ので、get_tags関数を利用することにした。以下からコピーしただけ。
参考 WordPressでタグの一覧をリスト表示させる方法 | TechMemo
3. 実行する
コピペ改造したコードが以下になります。2段表示するため、2つに分けた。
//============================================ //サイトマップAショートコード関数(カテゴリー、タグ、月別アーカイブ) //============================================ add_shortcode('my_sitemap', 'my_showSitemap'); function my_showSitemap() { remove_filter( 'wp_list_categories', 'remove_post_count_parentheses' ); remove_filter( 'get_archives_link', 'remove_post_count_parentheses' ); ob_start();?> <h2>カテゴリー</h2> <ul><?php wp_list_categories('show_count=true&title_li='); ?></ul> <h2>タグ</h2> <ul> <?php $posttags = get_tags(); if ($posttags) { foreach($posttags as $tag) { echo '<li><a href="'. get_tag_link($tag->term_id) .'">' . $tag->name . '</a> ('. $tag->count .')</li>'; } } ?> </ul> <h2>月別アーカイブ</h2> <ul><?php wp_get_archives('type=monthly&show_post_count=true'); ?></ul> <?php return ob_get_clean(); } //============================================ //サイトマップBショートコード関数(固定ページ、ABC順) //============================================ add_shortcode('my_sitemap2', 'my_showSitemap2'); function my_showSitemap2() { ob_start();?> <h2>固定ページ</h2> <ul><?php wp_list_pages('title_li='); ?></ul> <h2>記事一覧(ABC順)</h2> <ul><?php wp_get_archives( 'type=alpha' ); ?></ul> <?php return ob_get_clean(); }
固定ページからこれのショートコードを呼び出して
こんな感じで表示できた↓
https://papangit.com/wp/sitemap/
helloショートコードの次に作ったやつなので、何かおかしなことやってるかもしれないが、動いてはいる。