web-dev-qa-db-ja.com

wordpress - URIに基づいてテンプレートをロードする

'windows''doors''garages'という投稿タイプのカスタムがいくつかあります。

私のワードプレスサイトに次のようなURLがあるときはいつでも、カスタムテンプレート(special.php)をロードします。

www.mysite.com/windows/
www.mysite.com/doors/
www.mysite.com/garages/

この場合は適切ではないため、ページは使用したくありません(上記の例では縮小した例を示しました)。

どうすれば達成できますか?

現在、それらの名前のページは存在しないので、404(index.php)を取得しています。

1
Ash

あなたのカスタム投稿タイプのウィンドウは/ windows/etcにマップされると思いますか?

テーマのsingle-posttype.phpを使って、個々のカスタム投稿タイプのテンプレートをカスタマイズできます。 single-windows.php single-doors.phpとsingle-garages.php Wordpressは自動的にこれらを拾います

カスタムページテンプレートを使用することもできます。正しいテンプレート名を持つpage-windows.phpまたはカスタムテンプレート。

ページが投稿の種類を一覧表示することを目的としている場合は、投稿アーカイブのテンプレートを作成してみることができます。例: http://mark.mcwilliams.me/2010/10/wordpress-3-1 - カスタムポストタイプアーカイブの追加/

あるいは、それぞれの名前に対して分類法を作成し、taxonomy-windows.phpを使うこともできます。

上記のすべてを使用して、以下の行に沿って何かを使用してコードを共有することができます。

<?php
// example code, may need minor modifications
get_template_part('special',$post->post_type);

1つのファイル内のすべてのページのコードを共有し、子テーマをサポートし、special-windows.phpなどのファイルを介してオーバーライドすることができます。

または、上記のどれもあなたに合わない場合は、最終的な解決策があります。

http://www.braindonor.net/coding-blog/custom-pages-with-wordpress-plugins/230/

これにより、テーマに依存しない方法で、投稿やページを必要とせずに、好きな場所に好きな場所にページを配置できます。

1
Tom J Nowell

single.php内のすべてのスクリプトをsay "narmol.php"という名前のanthorテンプレートに移動します。

そしてsingle.phpの中で、

 if(post_type="windows" || "doors" || "garages") include "special.php";
 else include "normal.php";

上記のコードは単なるアイデアです(擬似コード)。実装方法を知っていると思います。あなたが知らないのなら私に知らせてください。

0
bingjie2680

新しい投稿タイプを登録するとき、投稿タイプアーカイブを有効にする引数がありますhas_archiveCodex を確認してください)。投稿タイプのアーカイブを有効にすると、次のURLが表示されます。

www.mysite.com/windows/
www.mysite.com/doors/
www.mysite.com/garages/

テンプレートファイルとしてarchive-$post_type.phpを使います。そして、ファイルarchive-$post_type.phpが存在しない場合、それはarchive.phpを探します。 ( Codex を確認してください)

だから私はあなたのための簡単な解決策は$post_typeファイルのarchive.phpをチェックすることだと思います、そしてそれがwindows, doors, garagesの一つであるとき、私たちはこのようにspecial.phpを含みます:

<?php
// archive.php
$post_type = get_query_var('post_type');
if (in_array($post_type, array('windows', 'doors', 'garages'))) {
    include 'special.php';
    exit;
}

// default content for other archive type
?>

注:投稿タイプを登録するときは、has_archivetrueに設定することを忘れないでください。

0
Anh Tran