技術ブログ
固定ページの記述
固定ページの記述
制作者一般には「投稿」より「固定ページ」の方がどちらかというと実装機会が少ないような気がする。
ここでは「久しぶりに固定ページのテンプレートを実装した」というコーダー向けに備忘録を記述する。
スラッグの重複
固有のスラッグの生成するwp_unique_post_slug関数で固定ページなど親子関係を持つpost_typeは同じpost_parentかつ同じpost_nameがないことをチェックしているので親ページが違えばpost_nameが同じでもpost_slugとしては固有とされる
WPの投稿検索の基本になるwp_queryクラスにおいてpostnameのパラメータが渡された場合でもget_page_by_pathで処理され親子関係を考慮して検索されるようになっているのでpost_nameが同じだけで投稿が混同されることはない
「Template Name: (テンプレート名)」による管理画面プルダウンへの適用
1 2 3 4 5 6 7 |
<?php /* Template Name: 私のカスタムページ */ ?> |
固定ページpage.phpでの「単一記事」の記述
1 2 3 4 5 6 7 8 |
<?php if(have_posts()):?> <?php while(have_posts()): ?> <?php the_post(); ?> ... <?php endwhile; ?> <?php endif; ?> |
while(have_posts()):the_post();の部分はthe_contentなどを利用するためには必須。
if(have_posts()):は必要かどうかと言われれば不要だが、投稿アーカイブなどとあわせてセットで入れておいても良いだろう。
固定ページpage.phpでの「記事一覧」の記述
固定ページで記事一覧を作成するには、サブクエリを作成してサブループにて取得する。
サブクエリー抽出条件設定関数はfunction.php内に記述
pressx.jp テンプレートでは inc/jnm-settings-sub-query.php内に記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php //ある固定ページの子階層の記事リストを取得するサブクエリ条件を取得する関数例 function jnm_get_child_pages( $my_posts_per_page=3, $parent_id ) { //$parent_idは親となる固定ページのID $args = array( 'posts_per_page' => $my_posts_per_page, 'post_type' => 'page', 'order' => 'asc', 'post_parent' => $parent_id, ); return $args; } ?> |
抽出条件取得関数を呼び出して条件取得、サブループ実行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php //上の関数を呼び出して条件取得 $args = jnm_get_child_pages( -1, $business_obj->ID); //サブクエリの実行 $query = new WP_Query( $args ); ?> <?php if($query->have_posts()):?> <?php while($query->have_posts()): ?> <?php $query->the_post(); ?> ... <?php endwhile; ?> <?php endif; ?> |
page-(スラッグ).php
ある1つの固定ページ専用のテンプレートファイルは以下。
page-{slug}.php
page-{ID}.php