首页 > 解决方案 > 与关系或不工作的 Wordpress 税务查询

问题描述

我正在运行一个 wordpress 循环,它从两种帖子类型中获取帖子。

我需要循环来抓取设置了某些类别的帖子。由于它是两种不同的帖子类型,它们都有一个类别分类法。当用户在前端选择一个类别时,我希望循环从一个帖子类型中获取所有帖子,该类别在其各自的分类下,以及来自其他帖子类型的所有帖子,该类别在其分类下。

为了简化我正在尝试做的事情的描述:

从两种帖子类型中获取循环都不是问题,但我一直试图让循环仅获取具有特定类别的帖子。我正在尝试一个“tax_query”,但循环似乎完全忽略了它,就好像我根本没有放 tax_query 一样。

在 tax_query 之外自行运行“category_name”或“quiz_category”就可以了。但是在 tax_query 中,它们都被完全忽略了。

    $cat = $_GET['cat'];
    $cat = sanitize_text_field($cat);

    $args = array(
        'post_type' => array('post', 'quizzes'),
        'posts_per_page' => -1,
        'category__not_in' => array( 9, 10 ),
        'tax_query' => array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'category_name',
                'field'    => 'slug',
                'terms'    => $cat
            ),
            array(
                'taxonomy' => 'quiz_category',
                'field'    => 'slug',
                'terms'    => $cat
            ),
        )
    );

标签: phpwordpressloops

解决方案


我认为问题在于您正在为术语 slug 值传递一个字符串。

在 之外tax_query,我认为您可以传递字符串或数组。在具有多种分类法的内部,我在文档tax_query中看到的唯一示例值被包装在数组中。

文档没有在我能找到的任何地方明确说明这一点。但是,如果您可以只使用字符串而不是数组,那么我直接从上面链接的文档中复制的这个片段将是它应该显示的地方:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array( 'quotes' ),
        ),
        array(
            'taxonomy' => 'post_format',
            'field'    => 'slug',
            'terms'    => array( 'post-format-quote' ),
        ),
    ),
);
$query = new WP_Query( $args );


话虽如此,您的代码应该如下所示:

  $cat = $_GET['cat'];
    $cat = sanitize_text_field($cat);

    $args = array(
        'post_type' => array('post', 'quizzes'),
        'posts_per_page' => -1,
        'category__not_in' => array( 9, 10 ),
        'tax_query' => array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'category_name',
                'field'    => 'slug',
                'terms'    => array($cat)
            ),
            array(
                'taxonomy' => 'quiz_category',
                'field'    => 'slug',
                'terms'    => array($cat)
            ),
        )
    );

如果这不起作用,您可以回显$cat变量并发布结果吗?


推荐阅读