web-dev-qa-db-ja.com

ページテンプレートを作成し、それを一度使用してから、再度使用するオプションを表示/非表示にすることはできますか?

私は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に含めたりしませんでした。

2
Kirkland

特定のテンプレートがないとページが機能しない場合は、テンプレートを選択する必要がなくなります。 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' );
4
Milo

WordPressには、この正確な状況を処理するためのページテンプレート階層が既に組み込まれています。あなたはあなたのpage.phpコードをめちゃくちゃにしたり、フィルタを追加する必要はありません、ただ階層の命名規則に従ってください:

  • カスタムテンプレートファイル:ページに割り当てられたページテンプレート。 get_page_templates()を参照してください。
  • page- {slug} .php - ページslugがrecent-newsの場合、WordPressはpage-recent-news.phpを使用するようになります。
  • page- {id} .php - ページIDが6の場合、WordPressはpage-6.phpを使用します。
  • page.php
  • index.php

http://codex.wordpress.org/Template_Hierarchyから

最も柔軟な方法は、Page Slugを使用することです。たとえばpage-my-slug.phpというテンプレートを作成し、次にmy-slugを使用して新しいページを作成します。

あなたの例では、 'page-something.php'はワードスラッグ 'something'を持つページのためにWordPressによって自動的にロードされます。代わりにページIDを使用したい場合は、あなたの例からテンプレートとして 'page-22.php'を作成してください。

4
Sandra