Wordpress - 如何通过其分类过滤添加的自定义帖子?

Posted

技术标签:

【中文标题】Wordpress - 如何通过其分类过滤添加的自定义帖子?【英文标题】:Wordpress - how to filter the added custom post through its taxonomy? 【发布时间】:2022-01-19 08:08:23 【问题描述】:

我在我的functions.php 中添加了一个新的自定义帖子,如何通过其分类对现有帖子进行排序?目标是在点击特定类别时过滤现有帖子。下面是示例代码:

在functions.php中添加了自定义帖子:

  $args = array(
   'label' => 'category',
   'public' => true,
   'show_ui' => true,
   'show_in_nav_menus' => true,
   'show_admin_column' => true,
   'hierarchical' => true,
   'query_var' => true
  );
   register_taxonomy('pdf_cat','pdf',$args);

在页面上 - 获取分类并将其作为我的类别选项:

<?php
  $args = array(
  'post_type' => 'pdf',
  'orderby' => 'slug',
  'order' => 'ASC',
  'parent' => 0,
  'hide_empty' => false
   );
  $categories = get_terms([
    'taxonomy' => 'pdf_cat',
    'hide_empty' => false,
     ]);
    foreach( $categories as $category )
      echo '<option><a class="ctg" href="'. get_category_link( $category->term_id ) .' ">' . $category->name . '</a></option>';
     
   ?>   

点击特定类别时通过其分类过滤现有帖子:

            <?php
              $cat = get_the_category();
              $cat = $cat[0]; 
              $catname = get_cat_name($cat->term_id); 
              $catid = get_cat_ID($catname);  
            ?>
              
            <?php
                  $paged = get_query_var('paged', 1);
                  $args = array(  
                      'post_type' => 'pdf',
                      'paged' => $paged,
                      'post_type' => 'post',
                      'cat' => $catid,
                  );
                  $query = new WP_Query($args);         
         
              global $query_string; 
              query_posts( $query_string . "&posts_per_page=15&paged=".$paged );
              while ( have_posts() ) : the_post()
            ?>

【问题讨论】:

【参考方案1】:

你需要使用tax_query

$pdf_args = array(
    'post_type'   => 'pdf',
    'paged'       => $paged,
    'post_status' => 'publish',
    'tax_query'   => array(
        array(
            'taxonomy' => 'pdf_cat',
            'field'    => 'term_id',
            'terms'    => $catid,
        ),
    ),
)

$pdf_data = new WP_Query( $pdf_args );  

了解更多详情here

【讨论】:

这段代码应该放在哪里? 我在如何将术语 id 变成每个类别的永久链接时遇到了麻烦

以上是关于Wordpress - 如何通过其分类过滤添加的自定义帖子?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

PHP 带有排序选项的WordPress的自定义分类法过帐列表过滤器

全代码实现WordPress分类目录和标签添加新的自定义字段

Wordpress 自定义帖子类型分类 - 获取特定内容

如何在wordpress rest api中过滤自定义帖子类型的自定义字段?

在 wordpress 的自定义页面模板中显示帖子分类信息