books
というカスタム投稿タイプがあります。このカスタム投稿タイプにはbook_category
という分類法があります。現時点で、そして近い将来には、各本をフィルタリングできる5つのカテゴリがあります。
さて、これらの各カテゴリには、それぞれのカテゴリに基づいて書籍を検索する独自のそれぞれのページがあります(各カテゴリに関連するその他の補助情報の中で)。
以下の私のコードでは、私はis_page()
に基づいて投稿を問い合わせることを試みました。これはうまくいきますが、もっと効率的で適切な対処方法があることがわかります。
<?php
if (is_page('horror')) {
$theTermBasedOnPage = 'horror';
} elseif (is_page('comedy')) {
$theTermBasedOnPage = 'comedy';
} elseif (is_page('romantic')) {
$theTermBasedOnPage = 'romantic';
} elseif (is_page('nonfiction')) {
$theTermBasedOnPage = 'nonfiction';
} elseif (is_page('drama')) {
$theTermBasedOnPage = 'drama';
}
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'terms' => $theTermBasedOnPage,
),
),
);
?>
ページに基づいて投稿をクエリする(カスタム投稿タイプ>分類法)最も良い方法は何ですか?
これをより効率的にするために、現在のページのスラッグを議論する代わりに、現在のスラッグをtax_queryの用語値として配置するだけです。何かのようなもの:
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'field' => 'slug',
'terms' => $post->post_name, // which'd be `horror` or `comedy`, etc
),
),
);
ヒューマンエラーがこのようなことをする可能性が高いことに注意してください。例えば、nonfiction
のページを持つがnon-fiction
のbook_category用語を持つと、ロジックを壊し問題を引き起こすかもしれません。
あなたが取り組んでいるもののコンテキストはわかりませんが、目標が単に "これらの各カテゴリにはそれぞれのページがある" の場合、このcustom-query-withを作成する必要はありません。各用語の-manual-page-relation。 WordPressの分類法と用語は、 登録 /分類法をpublic
とpublicly_queryable
として持っていれば、それぞれ独自のURLを持ちます。あなたはおそらくyour-site.com/book_category/horror/
を訪れてホラーブックのリストを見ることができます。その後、すべての用語に対してテンプレートファイルをカスタマイズすることも、 WordPressテンプレート階層 を参照として使用して個別にカスタマイズすることもできます。
カスタム分類ページを取得するために$args
を使用してカスタムクエリを作成する必要はありません。 WordPressが提供しているURL構造に従うことができます。
たとえば、次のようにしましょう。
それからカスタム投稿タイプBook
を作成しました
カスタム分類法Book Category
を作成し、Book
とリンクしました。
次に、Book
の下にMy Horror Story
という名前の新しいHorror
をBook Category
として作成しました。
そして、Book
の下にMy Comedy Story
という名前の新しいComedy
をBook Category
として作成しました。
他のすべてのデフォルト設定では、WordPressは自動的に次のURLを生成します。
// Book Links
https://example.com/book/my-comedy-story/
https://example.com/book/my-horror-story/
// Book Category Links
https://example.com/book-category/comedy/
https://example.com/book-category/horror/
ご希望のカスタム分類ページにこれらのURLを使用してください。
また、テーマテンプレートファイルを編集して目的のデザインを作成することもできます。 WordPressテンプレート階層 を確認してください。
たとえば、taxonomy-book-category.php
カスタム分類ページを設計するためにBook Category
という名前のテンプレートファイルを作成できます。
そのテンプレートファイルでは、WordPress テンプレートタグ および The Loop を使用して必要なクエリを実行します。
たとえば、非常に単純なテンプレートファイルは次のようになります。
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
the_content();
endwhile;
else :
_e( 'Sorry, no book matched your criteria.', 'textdomain' );
endif;
?>
これを試して:
<?php
// Get post's all terms.
$terms = wp_get_post_terms( get_the_ID(), 'book_category' );
// Get first term ID
$currentPostTermID = $terms[ 0 ]->term_id;
$args = array(
'posts_per_page' => -1,
'post_type' => 'books',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'book_category',
'terms' => $currentPostTermID,
),
),
);
?>