WordPress初心者にとって理解しづらいのは固定ページとそのテンプレートの関係なのだ。
何をしたいのか?
WordPressのブログは車の記事をアップしている。
記事に対してカテゴリーを詳細に付けてみた。
具体的にはメーカーと車種だ。
ブログを見るにあたって気になる車種の情報をまとめて一覧で見たいだろう。
その際に車種を一覧で見えて選択できる方法を作りたかったのである。
ブログの右サイドバーにはカテゴリーの選択があるのだが、プルダウンになっており選択するには問題は無い。
しかし一覧を眺めながら車種を選ぶという事を実現したかったのだ。
そこで固定ページに現在格納されている特定カテゴリー以下のリストを出力し、そこから車種を選択するページを作ることにした。
固定ページとテンプレートの関係
WordPressでは固定ページを呼び出すとその裏でPHPが走り何かの処理を行う、この関係の紐付けが分かりにくい。
あれこれ調べてこれがやっと分かった。
分かってみると非常に簡単な仕組みなのだ。
固定ページに設定されているスラッグと呼ばれる別名みたいなものが非常に重要な役割をしている。
このスラッグに書かれた名前のPHPファイルが呼び出されるという仕組みだ。
これには優先順位があり順番に探して呼び出すようになっている。
- 優先順位1:page-スラッグ名.php
- 優先順位2:page-ID.php
- 優先順位3:page.php
カテゴリーリストを得るための関数「wp_list_categories」
この「wp_list_categories」という関数はなかなか便利な関数だ。
カテゴリー一覧を取得するにあたって様々な形を指定する事が出来る。
パラメーターと呼び出し方は次の通りだ。
<?php $args = array(
‘show_option_all’ => ”,
‘orderby’ => ‘name’, //並び順
‘order’ => ‘ASC’,
‘style’ => ‘list’,
‘show_count’ => 1, //件数表示
‘hide_empty’ => 1, //空のカテゴリーは非表示
‘use_desc_for_title’ => 1,
‘child_of’ =>150, //指定カテゴリー以下のみ表示
‘feed’ => ”,
‘feed_type’ => ”,
‘feed_image’ => ”,
‘exclude’ => ”,
‘exclude_tree’ => ”,
‘include’ => ”,
‘hierarchical’ => 1,
‘title_li’ => __( ” ), //カテゴリーリストのタイトル無し
‘show_option_none’ => __( ‘No categories’ ),
‘number’ => null,
‘echo’ => 1,
‘depth’ => 0,
‘current_category’ => 0,
‘pad_counts’ => 0,
‘taxonomy’ => ‘category’,
‘walker’ => null
); ?>
<?php wp_list_categories( $args ); ?>
上記のコードを格納した「page-category-list.php」をサーバーにアップし、固定ページのスラッグにcategory-listとセットした。
この固定ページが呼び出されると「page-category-list.php」が動作して画面にカテゴリーリストを表示する。
ここまでは良いが新たな問題がある。
固定ページを呼び出しているのだが、表示されている画面は全く関係の無いタイトルもサイドバーも無い画面が出てしまう。
これではURLはブログの中のページを指しているが画面は全く別のサイトのようになってしまっている。これではあかんのだ。
固定ページ内からPHPを呼び出す方法が無いか?
調べてみると固定ページや記事ページからPHPを呼び出して使用できるプラグインがあるようだ。
しかしこれはセキュリティー上、危険だという事で却下。
その他に方法が無いかと探してみた。
するとうまい方法があるではないか!
ショートコードから指定のPHPを実行する関数「Include_my_php」を「function.php」内に追加する。
そして固定ページ内にはショートコードを書いて、そこに実行したいPHPファイル名を指定するのだ。
試しにやってみると上手く動作したのでこの方法で固定ページにカテゴリー一覧(車種の一覧)を動的に作成した。
これでいちいち車種を増やした際に書き換える手間は省ける。
まとめ
今回のWordPressでの車種別一覧を表示する固定ページは次のような仕組みで動作する。
- 固定ページを呼出
埋め込まれたショートコードからfunction.php内のInclude_my_phpを呼出 - 固定ページ内のショートコード
[myphp file=’page-category-list’] - ショートコードより「page-category-list.php」を実行
カテゴリーリストを出力→固定ページ内に表示
今回はこのへんで
では