web-dev-qa-db-ja.com

投稿とページの両方のページ属性パネルにテンプレートを追加しますか?

メインテーマをアクティブテーマのままにしておきたいのですが、 "Page/Post Attributes" パネルを介してユーザーが若干異なるレイアウトを選択できるようにします。理想的には、このレイアウトをメインテーマの "styles" ディレクトリの下に、それ自身のフォルダに保存したいです。

MyTheme>スタイル>私の特別なレイアウト> style.css

"Page Attributes" パネルに、 "My-special-layout" ...という名前のテンプレートがあります。

しかし、私は2つの問題があります...

  1. "child" テーマを "Page Attributes" /パネルに表示させることができないようです。 (私のメインテーマディレクトリの下にフォルダを追加し、そこに値 "style.css"を持つTemplate: my_main_theme_directoryファイルを置くだけです)。しかし、「ページ属性」パネルにテンプレートが表示されることはありません。

  2. POSTエディタで "Page Attributes" パネルが表示されません。テンプレートを 投稿 および ページ に適用できるようにしたいです。ポストエディタでこのパネルを取得する方法

3
Scott B

あなたは子供のテーマを正しくやっていません。子テーマは、すべての人が使用する必要がある個別のテーマですが、提供されていないすべてのテンプレート部分については別のテーマに依存しています。欲しいのはテンプレートです。

http://codex.wordpress.org/Theme_Development#Defining_Custom_Templates

基本的には、テーマのルートディレクトリに新しいテーマファイルを作成するだけです(例:foobar.php)。

/*
Template Name: Foobar
*/

それはあなたにFoobarと呼ばれる新しいテンプレートを与えるでしょう(明らかに、あなたが望むものにFoobarを変えてください。それはエディタページのドロップダウンメニューに現れる名前です)。

現時点では、WordPressはページとカスタム投稿タイプのテンプレートのみをサポートし、投稿はサポートしていません。これをハックする方法はいくつかあります。例えば、投稿上の投稿メタをチェックしたり、テンプレート上で引っ張ったりすることです。

function my_post_templater($template){
  if( !is_single() )
    return $template;
  global $wp_query;
  $c_template = get_post_meta( $wp_query->post->ID, '_wp_page_template', true );
  return empty( $c_template ) ? $template : $c_template;
}

add_filter( 'template_include', 'my_post_templater' );

function give_my_posts_templates(){
  add_post_type_support( 'post', 'page-attributes' );
}

add_action( 'init', 'give_my_posts_templates' );

そのコードをあなたのテーマのfunctions.phpファイルに入れても、それはうまくいくはずです(あなたが実際にあなたのテーマフォルダにカスタムテンプレートを持っている限り)。

子供のテーマの詳細については、こちらを参照してください。

http://codex.wordpress.org/Child_Themes

4
John P Bloch