基于页面查询自定义邮政类型分类类型

时间:2018-08-08 作者:Joe

我有一个自定义的帖子类型,叫做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,
      ),
  ),
  );
?>

What is the best way to query posts (Custom Post Type > Taxonomy) based on page?

3 个回复
最合适的回答,由SO网友:David Sword 整理而成

为了提高效率,您只需将当前slug作为tax\\u查询的terms值,而不必争论当前页面slug。类似于:

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 但是book\\u分类术语non-fiction 可能会破坏逻辑并导致问题。

我不知道您正在研究的内容的上下文,但如果目标只是“这些类别中的每一个都有各自的页面”,则无需为每个术语构建带有手动页面关系的自定义查询。WordPress分类法和术语将有自己的URLregistered 分类法为publicpublicly_queryable. (在这里猜测,但是)您可能可以访问your-site.com/book_category/horror/ 并查看恐怖书籍列表。然后,可以自定义所有术语的模板文件,也可以使用WordPress template hierarchy 作为参考。

SO网友:Scott

自定义分类页面:

您不必使用$args 用于获取自定义分类页面。您只需遵循WordPress提供的URL结构即可。

例如,假设:

您已选择以下永久链接结构:enter image description here

然后您创建了一个自定义的帖子类型Book

创建自定义分类法Book Category 并链接到Book.

然后创建一个新的Book 标题为My Horror Story 在下面HorrorBook Category.

创建了另一个新的Book 标题为My Comedy Story 在下面ComedyBook 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 Template Hierarchy 学习如何做到这一点。

例如,可以创建名为taxonomy-book-category.php 设计Book Category 自定义分类页面。

在该模板文件中,使用WordPressTemplate TagsThe Loop 进行必要的查询。

例如,非常简单的模板文件可以如下所示:

<?php
    if ( have_posts() ) : while ( have_posts() ) : the_post();
        the_content();
    endwhile;
    else :
        _e( \'Sorry, no book matched your criteria.\', \'textdomain\' );
    endif;
?>

SO网友:wpdev

Try this:

<?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,
        ),
    ),
);
?>
结束

相关推荐

If Custom Taxonomy

我为我的帖子设置了一个自定义分类法,名为$type. 如果$type == \'roast\'.<?php $number = 1; ?> <!-- the loop --> <?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?> <?php $type = get_the_term_list( $post->ID