「ページ」をクリック - >「新規追加」をクリック
新規ページ追加画面選択されているデフォルトのページテンプレートは「デフォルトのテンプレート」です。デフォルトのオプションをに変更する方法はありますか、「私のその他のテンプレート」としましょう。それで、私が "Add New"をクリックしたとき、 "My Other Template"が常にデフォルトで選択されるようになるでしょうか?これはページが保存される前に行われる必要があります。私はJSでこれを達成することができます。 WPオプションはありますか?
更新:
これが例です:
テンプレートオプション:
に変更するワードプレスの方法はありますか?
私は多分これが機能で達成されるかもしれないと思った:
if (some condition is met)
default_template = My Template 1
endif
テンプレート階層がどのように機能するのか私は知っています。テンプレートを特定のページに常に使用する方法を知っています。しかし、それは問題ではありません。私は、エンドユーザーが簡単にできるようにするために、特定の条件でページのグループで使用するテンプレートを事前に選択できるようにする一方で、必要に応じて別のテンプレートに切り替える柔軟性をユーザーに提供できる。
template_include
を使用すると(Brad Daltonが推奨)、フロントエンドのページテンプレートのみが変更され、管理者はページを編集するときに変更されません。
一方、czerspalaceが示唆しているように、メタボックスがレンダリングされる前にpostオブジェクトの値を変更するとうまくいきます。 $post->page_template
が設定されていない場合にのみこれを適用するチェックを追加しました。
function wpse196289_default_page_template() {
global $post;
if ( 'page' == $post->post_type
&& 0 != count( get_page_templates( $post ) )
&& get_option( 'page_for_posts' ) != $post->ID // Not the page for listing posts
&& '' == $post->page_template // Only when page_template is not set
) {
$post->page_template = "page-mytemplate.php";
}
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
私はこれをテストしていませんが、うまくいくかもしれません。テンプレートはグローバル投稿オブジェクトの値に基づいて選択されるため、メタボックスがレンダリングされる前に投稿オブジェクトの値を変更する必要があります。デフォルトのドロップダウンを選択するコードは次のとおりです。 https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/meta-boxes.php#L751
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
function wpse196289_default_page_template() {
global $post;
if ( 'page' == $post->post_type && 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID ) {
if( $my_conditions )
$post->page_template = "page-mytemplate.php";
}
}
私は新しい ブロックエディタ (Gutenberg)でそれを成し遂げました。
この場合、タスクは REST APIレスポンス にフックする必要があります。
Adrian's answerから条件を取りました。
foreach ( array( 'page', 'post' ) as $post_type ) :
add_filter( "rest_prepare_{$post_type}", 'wpse196289_rest_set_default_page_template', 1, 2 );
endforeach;
function wpse196289_rest_set_default_page_template( $data, $post ) {
if ( 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID && '' == $data->data['template'] ) :
$data->data['template'] = 'page-mytemplate.php';
endif;
return $data;
}
私が見つけた最も簡単な方法は、コードをハックすることなく、あなたのテンプレートファイルにリダイレクトするために(あなたのpage_template-name.phpファイルから離れた)個別のpage.phpとget_template_part()を作ることです。これにより、サイト全体でデフォルトのテンプレートが提供されるだけでなく、テンプレートは個別のオプションとして保持されます。
<?php get_template_part('page_template-name'); ?>
これがあなたのpage.phpファイルに存在する必要があるすべてです。デフォルトのテンプレートを取得するだけです。テンプレートサイト全体を変更したい場合は、スラッグを変更するだけで済みます。デフォルトオプションが選択されているページはすべて変更されます。テンプレートを使用するように特に設定されている(つまり、デフォルトではなくtemplate-1に設定されている)ページは変更されません。
関数ファイル内で template_include
を条件タグとともに使用します。
add_filter( 'template_include', 'default_page_template', 99 );
function default_page_template( $template ) {
if ( is_singular( 'page' ) ) {
$default_template = locate_template( array( 'default-page-template.php' ) );
if ( '' != $default_template ) {
return $default_template ;
}
}
return $template;
}