Cocoonのsitemapショートコードの表示順を変更する

Web

今朝、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/

以上です。

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