web-dev-qa-db-ja.com

実際のページを作成せずに組み込みページを作成する

例えば:

site.com/contact(またはパーマリンクを使用していない場合はsite.com/?page=contact

誰かがそのページに行くとき、私はpage-contact.phpのようなテーマテンプレートをロードしたいです。

しかし、私はこの作業のためにダッシュボードにページを作成したくありません。 functions.phpの中で、どうやってこれを内部で行うことができますか?

そのbbpressプラグインがどういうわけかそれを標準のワードプレスページではない/ users/pagesのためにするので、私はそれが可能であると知っています...

4
Emma

これが私が今サイトで使っているテクニックです。これには、 "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で偽のページを作成する

6
goldenapples

あなたが言ったようにこれを行うことができます。それは2.9以降のWordpressのテンプレート階層に組み込まれています。

Contactという名前のページがある場合は、page-contact.phpというpage.phpとは異なるページテンプレートを作成します。そして、できれば、それはうまくいきます。

WPのドキュメントから。

ページIDまたはページスラッグによるテンプレート

あなたの名前にIDまたはスラッグを付けて、さまざまなアーカイブ "page"を使用することができます。バージョン2.9でのみ利用可能です。

例を示します。

page-{id}.php
page-{slug}.php

これはあなたが望んだことですか?

0
danielwiener