例えば:
site.com/contact
(またはパーマリンクを使用していない場合はsite.com/?page=contact
)
誰かがそのページに行くとき、私はpage-contact.php
のようなテーマテンプレートをロードしたいです。
しかし、私はこの作業のためにダッシュボードにページを作成したくありません。 functions.phpの中で、どうやってこれを内部で行うことができますか?
そのbbpressプラグインがどういうわけかそれを標準のワードプレスページではない/ users/pagesのためにするので、私はそれが可能であると知っています...
これが私が今サイトで使っているテクニックです。これには、 "template"に対するクエリvarの登録、および/contact
という名前のエンドポイントの登録が含まれます。これにより、内部的に?template=contact
に書き換えられます。その後、template_redirectフックでそのクエリ変数をチェックし、存在する場合は、ロードして終了するページテンプレートを含めます。
/* Add a query var for template select, and and endpoint that sets that query var */
add_action( 'init', 'wpse22543_rewrite_system' );
function wpse22543_rewrite_system() {
global $wp, $wp_rewrite;
$wp->add_query_var( 'template' );
add_rewrite_endpoint( 'contact', EP_ROOT );
$wp_rewrite->add_rule( '^/contact/?$',
'index.php?template=contact', 'bottom' );
$wp_rewrite->flush_rules();
}
/* Handle template redirect according the template being queried. */
add_action( 'template_redirect', 'wpse22543_select_template' );
function wpse22543_select_template() {
global $wp;
$template = $wp->query_vars;
if ( array_key_exists( 'template', $template ) &&
'contact' == $template['template'] ) {
/* Make sure to set the 404 flag to false, and redirect
to the contact page template. */
global $wp_query;
$wp_query->set( 'is_404', false );
include( get_stylesheet_directory().'/contact.php' );
exit;
}
}
これは?template = contactまたは/ contactのリクエストに対してcontact.phpファイルを提供します。
もっと早い方法があるでしょうが、これはうまくいきます。これがより徹底的なチュートリアルです: WordPressで偽のページを作成する 。
あなたが言ったようにこれを行うことができます。それは2.9以降のWordpressのテンプレート階層に組み込まれています。
Contactという名前のページがある場合は、page-contact.phpというpage.phpとは異なるページテンプレートを作成します。そして、できれば、それはうまくいきます。
WPのドキュメントから。
ページIDまたはページスラッグによるテンプレート
あなたの名前にIDまたはスラッグを付けて、さまざまなアーカイブ "page"を使用することができます。バージョン2.9でのみ利用可能です。
例を示します。
page-{id}.php page-{slug}.php
これはあなたが望んだことですか?