私はWPテーマ/プロジェクトに取り組んでいます。その中にはそれぞれ一度だけ使用されるいくつかのカスタムページテンプレートが含まれています。たとえば、地図上のものを見つけるための地図と検索フォームを含むページがあります。明らかにマップページはユニークなページテンプレートを必要とします、しかしそのテンプレートは他のどのページにも決して使われないでしょう。クライアントがページテンプレートを選択しているときには、選択する必要があるオプションだけが表示されるように、[テンプレート]ドロップダウンメニューからこのページテンプレートを非表示にするか削除します。その方法を知っている人はいますか、それともまったく別の角度からこれに取り組むべきですか。
ありがとう、カークランド
++++++++++++++++
更新 - 解決策:
私が一度だけ使用したかったページテンプレートのそれぞれについて(すなわち、セットアップ中、クライアントがアクセスする前)、単に削除しました...
/*
Template Name: NAME_HERE
*/
新しいページを追加するときにオプションとして表示されないようにします。それから私はこれでpage.phpのすべてを置き換えました...
if ( is_front_page() ) { include('page-home.php'); }
elseif ( is_page(22) ) { include('page-something.php'); }
elseif ( is_page(48) ) { include('page-whatever.php'); }
else{ include('page-default.php'); }
page.php
にあったものはすべてpage-default.php
に移動されます。あるいは、最後にelse
ステートメントの中に全部入れることもできます。どちらにしても。
私はクライアントのための設定をするので、これは私にはうまくいくので、このプロジェクトを引き渡す前に「一度だけ」のページを作成します - ページIDを知っているでしょう。
ところで...あなたはこれを機能させるために命名規則page-XXX.php
を維持する必要はありません。私はそれらをもっと簡単にグループ化できるようにしただけです。
ページを追加するときにクライアントに選択させたいページに「テンプレート名」コメントを残し(例:「全角」page-full.php
)、if条件を追加したりpage.php
に含めたりしませんでした。
特定のテンプレートがないとページが機能しない場合は、テンプレートを選択する必要がなくなります。 template_include
をフィルタリングし、要求されたページに基づいてテンプレートを選択します。
function wpse50455_template_include( $template ) {
// check if it's a page
if ( is_page() ):
$this_page_id = get_query_var( 'page_id' );
// check for presence of meta data to determine what template you need
// return the desired template if required
return get_stylesheet_directory_uri() . '/my-special-template.php';
endif;
return $template;
}
add_filter( 'template_include', 'wpse50455_template_include' );
WordPressには、この正確な状況を処理するためのページテンプレート階層が既に組み込まれています。あなたはあなたのpage.phpコードをめちゃくちゃにしたり、フィルタを追加する必要はありません、ただ階層の命名規則に従ってください:
http://codex.wordpress.org/Template_Hierarchyから
最も柔軟な方法は、Page Slugを使用することです。たとえばpage-my-slug.phpというテンプレートを作成し、次にmy-slugを使用して新しいページを作成します。
あなたの例では、 'page-something.php'はワードスラッグ 'something'を持つページのためにWordPressによって自動的にロードされます。代わりにページIDを使用したい場合は、あなたの例からテンプレートとして 'page-22.php'を作成してください。