2021.04.09  2021.04.09

WordPressでサイトマップを自作!投稿機能と連携させ動的に内容を更新する方法

皆さんこんにちは!最近は駆け出しエンジニアに向けた記事ばかり書いていたのですが、そろそろテクニカル的なことも書きたいと思いまして…
今回は、投稿機能と連携させて自動的に内容を更新するサイトマップをWordPress環境で自作していこうかなと思います!

それでは早速行きましょう!

作る前にどう作るか構成を考える

いきなりコードを見せて「はい。どうぞ」というのも悲しいので、ここでは作り方を考えてから実際にコーディングするまでの流れを話したいと思います。

まずはカテゴリー一覧を作る方法をおさらいする。

カテゴリー一覧は、

get_categories(array(…));

↑皆さん普段これを使いますね。

これでカテゴリーの情報を絞って、ループ文で呼び出せば、全てのカテゴリーが呼び出せます。

「ん?ちょっとまてよ。ループでカテゴリーを全て呼び出すということは、ループ文の中でそのカテゴリーに該当する記事のタイトルを呼び出せばいいんじゃないか?」

と考えた方はセンスいいです。

分かりやすく説明すると、
「全てのカテゴリーを呼び出すために、ループ処理で繰り返し同じ処理をする。」
「繰り返されている同じ処理の中に、呼び出しているカテゴリーに該当する記事を呼び出すクエリ処理を記述する。」
そうすれば繰り返しカテゴリーが呼び出され、そのカテゴリーの下に該当する記事のタイトルが出てくる。

ということです。おわかりいただけましたか…?

言葉で説明するのはここまでが限界なので、次はコードを見て理解していきましょう!


コード

 
                    //$termsに任意のカテゴリー情報を格納する
                    //カテゴリー表示用の設定get_categoriesで配列指定
                    $postType = 'posy';  //投稿タイプ
                    $taxSlug = 'category';  //タクソノミー名
                    $terms = get_categories(array(
                        'type'       => $postType,  //投稿タイプ
                        'taxonomy'   => $taxSlug,  //対象タクソノミー
                        'parent'     => 0,  //1で子タームだけサーチ 0で親だけサーチ
                        'orderby'    => '',  //
                        'order'      => 'ASC',  //昇順
                        'hide_empty' => true,  //「false」だと投稿がないカテゴリーも出力されてしまう。
                    ));

と、上記でどの投稿タイプのカテゴリーを抽出するかを指定、タクソノミー名というのは「カテゴリーのスラッグ」ですね。

上記でカテゴリーについて指定したので、次は上記の内容をループ文で呼び出しましょう!


foreach ((array) $terms as $in = $term) {
echo $term->name; //ここでタームが呼び出されます
                        //投稿がないタクソノミーを無視するかはget_categoriesで指定可能
                        //foreach文の中でqueryを回すことでカテゴリーの数だけピンポイントで回すことができる。
                        //tax_queryとtermを併用すればカテゴリーの数だけ絞り込みをした状態で出力可能になる。
                        $targetslug = $term->slug;
                        $index_query = array(  //クエリー初期設定
                            'post_type' => 'post',          //投稿タイプ
                            'post_status' => 'publish',        //公開済みの記事
                            'posts_per_page' => 10,            //出力数 -1で全件
                            'tax_query' => array(
                                array(
                                    'taxonomy' => 'category',
                                    'terms' => $targetslug,
                                    'field' => 'slug',
                                    'operator' => 'IN',
                                ),
                            ),
                        );
                        $index_query = new WP_Query($index_query);//ここまででループ文の中でクエリを設定することができました。

 if ($index_query->have_posts()) {
   while ($index_query->have_posts()) {
    $index_query->the_post();
      //ここでHTMLなどを使って呼び出したい記事の内容を記述します。
   }
 }
}

とまあこんな感じですね。

「は?意味わからん。」と思われた方のために説明しましょう。
まず、最初に書いたPHPコードで、呼び出したいカテゴリーの設定をしたのは言いましたよね?

次に書いたPHPコードは、ループ処理の中身を記述しています。
foreachってところからですね。
まずはカテゴリー名を出さなきゃそのあとにタイトルの羅列が来ても仕方ないので、カテゴリー名を出力します。
echo $term->name;」ってところです。

そのあとはいつも通りクエリ設定をしているんですが、今回はforeachの中でクエリ設定してるというところが目玉ポイントです。

tax_queryを使ってスラッグ名で記事の選別を行ってますが、tax_queryの使い方については別の記事でも紹介しているので省きますね。
WordPress:tax_queryを使って記事の絞り込みを行う方法



最後は記事があれば出力してくださいという命令文(if ($index_query->have_posts()) {…})の中に、タイトル出力の命令などを入れればよいだけです!

まとめ

いかがでしたか?
今回は、投稿機能と連携させて自動的に内容を更新するサイトマップをWordPress環境で自作する方法について解説しました。
できるだけわかりやすく説明したつもりですが、及ばなかったらすみません。

WordPressテーマの自作は決して簡単なものではありませんが、自分の好きなデザイン、好きな機能をカスタムできることは嬉しいことだと思います。
皆さんも自分なりのブログを作って、情報を発信してみてはいかがでしょうか?

あなたにオススメの記事
マコブログ
Makoto
高校卒業と同時にプログラミングを学習しはじめ、今年で4年目になります。
普段はフロント周りで作業をしていて、WordPressの開発とSEO対策には自信があります。
マコブログでは、プログラミングやSEO対策についての情報を発信しています。

よく読まれる記事

S&P500研究所

【マコブログ 2nd】S&P500研究所がOPENしました!!

Read More →