ウェブサイトの構成を考える際、過去の記事へスムーズにアクセスできるよう、アーカイブ一覧の設置は欠かせません。しかし、WordPressの標準機能を使うと、出力形式が固定されてしまい、デザインや導線に合わせた柔軟なカスタマイズが難しいと感じたことはありませんか?
もし、標準の関数をそのまま使い続け、出力されたHTMLを無理やりCSSで調整するだけで済ませていると、マークアップの自由度が失われ、将来的なデザイン変更のたびに余計な工数が発生するというコストを抱え続けることになります。
この問題を解決するのが、WordPressの強力なアーカイブ関数を「表示」ではなく「文字列として取得」する方法です。
従来のアーカイブ表示が抱える課題
WordPressでアーカイブを表示する際、通常はwp_get_archives() 関数を使用します。しかし、この関数のデフォルト動作(引数 echo’ => true または未指定)では、HTMLリスト( ul、li)が直接出力されてしまいます。
これはテンプレート内で使用する分には便利ですが、以下のようなケースで問題になります。
カスタマイズの限界
出力されるHTML構造が固定されるため、特定のクラスや属性を付加したり、リストタグ以外の独自マークアップで囲ったりする柔軟性が皆無です。文字列加工の困難さ
出力前にリンクURLの一部を変更したり、テキストを追加したりといったPHP側での文字列操作ができません。テーマ開発での制約
ショートコードやAjaxで利用する際、意図せず出力されてしまう「エコー(表示)」動作は、バグの温床になりがちですね。wp_get_archives() 関数を文字列取得モードで活用する
この課題を解決する鍵は、wp_get_archives() 関数の引数です。この関数には、出力を直接行うか、それとも出力せずに結果をPHPの変数に文字列として格納するかを制御するパラメーターが用意されています。
使用するのは、’echo’パラメーター。
| パラメーター | 値 | 動作 |
|---|---|---|
| echo | true (デフォルト) | アーカイブを直接画面に表示します。 |
| echo | false | アーカイブを文字列として返し、表示はしません。 |
この ‘echo’ => false を設定することで、PHPの変数内にHTML文字列としてアーカイブ一覧を保持でき、str_replace() などの標準的なPHP関数で自由に内容を加工できるようになります。
実務に役立つ!アーカイブ文字列取得と加工のサンプルコード
ここでは、カスタム投稿タイプ「custom_post」の年別アーカイブを、標準のHTML出力ではなく、特定のURL形式に変換して表示する実用的な例をご紹介します。|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php // 1. wp_get_archives()に渡す引数を設定 $archive_args = array( // 年別アーカイブを取得 'type' => 'yearly', // 出力せず、文字列として変数に格納する(最も重要な設定) 'echo' => false, // 対象とするカスタム投稿タイプを指定 'post_type' => 'custom_post' ); // 2. アーカイブを文字列として取得 $yearly_list = wp_get_archives($archive_args); // 3. 取得した文字列をPHPで加工 // 例: /custom/post/ を /custom/post/date/ に置換し、URLをカスタム化 // ※実際のパーマリンク設定に合わせて適宜変更してください $custom_yearly_list = str_replace( '/custom/post/', '/custom/post/date/', $yearly_list ); // 4. 加工後の文字列を出力 echo $custom_yearly_list; ?> |
カスタム投稿タイプを使用している場合、WordPressのデフォルト設定ではアーカイブのURLが意図しないものになることが多々あります。
このテクニックを使えば、複雑なRewrite Ruleを設定することなく、出力されるHTMLのリンク先だけをサクッと変更できてしまうので、開発効率がグッと上がりますよ。


コメント