この質問に答えた後ページを編集するときに利用できる可能性のあるページテンプレートのドロップダウンリストを操作することが可能かどうかと思いました。 WordPressはこのリストをルートディレクトリで利用可能なテンプレートファイル(page.php
、page-onecolumn.php
、page-about-us.php
のような)から導き出します。データベースにリストを保存するようには見えません。
例えば、あなたが10個のページテンプレートを持っていて、管理者以外のユーザのためにそれらのうちのいくつかにアクセスを制限したいなら、これを望む合法的な理由があると想像することができます。あるいは、オプションページを使って動的にテンプレートを作成したい場合は、リストを拡張します。
主力は WP_Theme::get_page_templates()
(ヘルパー関数 get_page_templates()
で囲まれた)です。ソースをチェックアウトすると、次のようになります。
/**
* Filter list of page templates for a theme.
*
* @since 3.9.0
* @since 4.4.0 Converted to allow complete control over the `$page_templates` array.
*
* @param array $page_templates Array of page templates. Keys are filenames,
* values are translated names.
* @param WP_Theme $this The theme object.
* @param WP_Post|null $post The post being edited, provided for context, or null.
*/
return (array) apply_filters( 'theme_page_templates', $page_templates, $this, $post );
例:
function wpse_226324_page_templates( $templates ) {
// Remove tpl-home.php template
unset( $templates['tpl-home.php'] );
// Add custom template
$templates['tpl-custom.php'] = 'Custom Template';
return $templates;
}
add_filter( 'theme_page_templates', 'wpse_226324_page_templates' );
theme_page_templates
コードリファレンス もご覧ください。