カスタムの単一ページがありますsingle-ENG.php
。このページを分類法のある投稿に使用したいと思いますlanguage=>english
。これは可能ですか?
2 に答える
はい、これは可能ですが、最初にWordpressテンプレート階層を確認する必要があると思います。
あなたのアプローチにはいくつかの問題があります:
カスタムページテンプレートに「single-xxxx.php」という名前を付けないでください。'single'プレフィックスは、単一投稿ビューに使用されます。これにより、Wordpressが混乱し、投稿タイプ'ENG'(おそらくテーマに存在しない)の単一の投稿を表示しているときにのみテンプレートが読み込まれる可能性があります。
あらゆる種類の投稿コンテンツのシェルとしてページを使用することはお勧めしません。この理由は、Wordpressが提供する既存のツールを本質的に回避して、独自の組み込みのデフォルトを使用してすでに実行できることを強制するためです。
特定の分類法の投稿を格納するまったく新しいページオブジェクトを作成する代わりに、taxonomy-language-english.phpファイルを作成し、テーマのメニュー([ダッシュボード]->[外観]->[メニュー])でナビゲーションを設定してみませんか?
言語分類法を実際に登録している場合、Wordpressは新しい分類法テンプレートを自動的に認識し、デフォルトのループですべての適切なデータを照会します。
これは、2つの方法を使用して投稿をクエリする方法の詳細です。1つ目は、良い練習の練習として合うように構造を変更することを条件に、私が使用することをお勧めするものです。2つ目は、特定のページにカスタムテンプレートを適用することによるアプローチです。Wordpressの混乱を避けるために、新しいファイル名を使用して自由を取りました。
taxonomy-language-english.phpを使用する
<?php
if(have_posts()) : while(have_posts()) : the_post();
echo get_the_title().'<br/>'; //Output titles of queried posts
endwhile;
else :
echo 'No posts were found'; //No posts were found
endif;
?>
pagelang-english.phpを使用する
<?php
/**
* @package WordPress
* @subpackage MyWordpressThemeName
* Template Name: Single English
*/
$args = array('tax_query' => array(
array(
'taxonomy' => 'language',
'field' => 'slug',
'terms' => 'english'
)
));
$q = new WP_Query($args);
if($q->have_posts()) : while($q->have_posts()) : $q->the_post();
echo get_the_title().'<br/>'; //Output titles of queried posts
endwhile;
else :
echo 'No posts were found'; //No posts were found
endif;
?>
これはあなたが始めるのに十分なはずです。幸運を。
はい、あなたはこれを行うことができます。language
以下のコードは、カスタム分類法が呼び出され、チェックする用語にスラッグがあることを前提としていますenglish
(明らかに必要に応じて変更します)。このコードをfunctions.php
ファイルに入れます。
/**
* Select a custom single template
*
* @param required string $single The path to the single template
* @return string $single The updated path to the required single template
*/
function my_single_template($single){
global $wp_query, $post;
$terms = wp_get_object_terms($post->ID, 'language');
if(!empty($terms)) : foreach($terms as $term) :
if($term->slug === 'english') :
$single = sprintf('%1$s/single-ENG.php', TEMPLATEPATH);
endif
endforeach;
endif;
return $single;
}
add_filter('single_template', 'my_single_template');
編集
@ maiorano84によって提供された回答を読んだので、これが最善の方法ではないことに同意します。この手法をどこで使用すべきかを考えることができる状況はほとんどありませんが、WPがフィルターを追加したという事実は、必要があるかもしれないことを理解していることを示しているので、安全に使用できるはずです。