我想要一个只有一个类别但来自所有自定义帖子类型的自定义查询

时间:2019-10-01 作者:David Borrink

我创建了一个模板,我想在其中调用所有帖子类型,但只显示来自公共类别的帖子类型。我得到的结果都是普通的博客帖子,还有一些来自某个自定义帖子类型。我已经复查了多次,并且在测试页面上使用了正确的模板。我已经清除了缓存。

在该链接的测试页面上:https://moneysmartfamily.com/budgeting-category-test/ 您将看到一个博客帖子列表。我试图显示的类别是“预算”。每个帖子的类别位于元行的末尾。你会看到,不仅仅是“预算”在增加。如果你向下滚动到7月25日,你会看到没有提到类别的帖子。这些是来自CPT的。(我不明白为什么他们没有列出类别。但他们确实有。)

我的查询参数应该只列出所有帖子类型中的“预算”类别帖子,但我从常规帖子中获得显示的所有类别。如何确保在运行时只获取我想要查看的类别?

我在一个元框插件中创建了这些自定义帖子类型,每个CPT都有一个自定义分类法。我想知道是否需要以某种方式组合分类名称以确保它们被使用。有谁能指出其他地方是如何做到这一点的,这样我就可以弄清楚这一点?

这是我的模板代码,您可以看到我正在尝试做什么。

<?php
/**
 * Template Name: Category - Budgeting
 *
 *
 * The template for displaying all pages.
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other \'pages\' on your WordPress site will use a
 * different template.
 *
 * @package WordPress
 * @subpackage Twenty_Twelve
 * @since Twenty Twelve 1.0
 */

get_header(); 

    $args = array(
        \'category_name\'  => array(
            \'budget\'
        ), // category_name (string) – use category slug.
    );


    // This query should now only have the post_type in the args above that are in the category budget.
    $this_query = new WP_Query( $args ); ?> 


<div id="primary" class="site-content">
    <div id="content" role="main">

    <?php 
    if ( $this_query->have_posts() ) :



        while ( $this_query->have_posts() ) : $this_query->the_post(); 
            $post_id = get_the_ID(); // In case you need to use the post ID
            ?>

            <?php if( has_post_thumbnail() ): ?>
        <header class="entry-header">

            <h1 class="entry-title">
                <a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a>
            </h1>
            <span class="post-meta">Author  <?php the_author_posts_link(); ?> | <?php the_time(\'F jS, Y\'); ?>  | <?php the_category(\', \'); ?></span>

        </header><!-- .entry-header -->


              <div class="entry-summary">
            <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(\'thumbnail\', array(\'class\' => \'alignleft\')); ?></a><?php the_excerpt(); ?>
        </div><!-- .entry-summary -->


            <?php endif; ?>

        <?php
        endwhile;
        wp_reset_postdata();
    endif;
    ?>
    </div><!-- #content -->
</div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
更新:经过一些探索性的工作,弄清楚了如何进行多个税务查询并进行了多次尝试,我在args中尝试了此设置,但得到了空白内容。你是否有什么特别的地方可以解释为什么这不起作用?我现在正在学习查询,所以如果您能给我一些建议,我将不胜感激。谢谢

     $args = array(
        \'post_type\' => array(
            \'post\',
            \'media-appearance\',
            \'members-archive\',
            \'money-saving-tips\',
            \'review\'
        ),
    \'tax_query\'  => array(
    \'relation\' => \'AND\',
    array(
        \'taxonomy\'         => \'post\',
        \'terms\'            => \'budget\',
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
    array(
        \'taxonomy\'         => \'money-savings-tips-categories\',
        \'terms\'            => \'budget\',
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
    array(
        \'taxonomy\'         => \'reviews-categories\',
        \'terms\'            => \'budget\',
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
    array(
        \'taxonomy\'         => \'media-appearance-categories\',
        \'terms\'            => \'budget\',
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
    array(
        \'taxonomy\'         => \'member-archives-categories\',
        \'terms\'            => \'budget\',
        \'field\'            => \'slug\',
        \'operator\'         => \'IN\',
    ),
),
);

2 个回复
SO网友:Jess_Pinkman

类别名称应该是字符串,而不是数组,我认为post\\u类型没有提到为arg,因此默认为“post”,所以请尝试:

    $args = array(
      \'post_type\' => \'any\', //or use cpt slug as string, or array of strings if multiple
      \'category_name\' => \'budget\', //use \'budget,premium\' if you want posts with budget OR premium, use \'budget+premium\' if you want budget AND premium. 
    );

    $this_query = new WP_Query( $args ); ?> 

SO网友:Sabbir Hasan

在多重分类查询中,只需将关系更改为“或”。这应该可以解决问题。