今朝、Cocoonのショートコードで作成したHTMLサイトマップを確認していて気付いたのだが、「投稿一覧」がアルファベット昇順で並んでいることに気付いた。
引数で対応することもできないようだったので、ショートコード自体を先制宣言することにしました。
なお、Cocoon以外のテーマでもこのショートコードは使えるため、プラグイン無しでHTMLサイトマップを作成したい人にもご活用いただけます。
設置するPHPコード
functions.phpに処理を追加します。
./wp-content/themes/cocoon-child-master/functions.php・・・
// sitemapショートコード改良
if (!function_exists('sitemap_shortcode')) {
function sitemap_shortcode($atts, $content = null)
{
extract(shortcode_atts([
'page' => 1,
'single' => 1,
'category' => 1,
'archive' => 0,
], $atts, 'sitemap'));
$html = '<div class="sitemap">';
if ($page) {
$html .= '<h2>' . apply_filters('sitemap_page_caption', __('固定ページ', THEME_NAME)) . '</h2>';
$html .= '<ul>' . wp_list_pages(['title_li' => '', 'echo' => 0]) . '</ul>';
}
if ($single) {
$html .= '<h2>' . apply_filters('sitemap_single_caption', __('記事一覧', THEME_NAME)) . '</h2>';
$html .= '<ul>' . wp_get_archives(['type' => 'postbypost', 'echo' => 0]) . '</ul>';
}
if ($page) {
$html .= '<h2>' . apply_filters('sitemap_category_caption', __('カテゴリー', THEME_NAME)) . '</h2>';
$html .= '<ul>' . wp_list_categories(['title_li' => '', 'echo' => 0]) . '</ul>';
}
if ($page) {
$html .= '<h2>' . apply_filters('sitemap_archive_caption', __('月別アーカイブ', THEME_NAME)) . '</h2>';
$html .= '<ul>' . wp_get_archives(['type' => 'monthly', 'echo' => 0]) . '</ul>';
}
$html .= '</div>';
return $html;
}
add_shortcode('sitemap', 'sitemap_shortcode');
}
・・・
コード要所解説
元となるソースコードを参考にしつつ、ob_start関数は使わない方向で修正を行っています。
wp_get_archives(['type' => 'postbypost', 'echo' => 0])
で投稿一覧を出力しますが、「type」の設定を「alpha」から「postbypost」に変更することで、アルファベット昇順から公開日降順で表示されるようになります。
ついでなので見出し文言を「投稿一覧」から「記事一覧」に修正しています。
参考サイト
wp_get_archives関数などを標準出力ではなく、文字列取得できないか調べる際に大変参考になりました。
https://elearn.jp/wpman/
以上です。