是否可以根据岗位类型有条件地按分类查询岗位?

时间:2011-03-09 作者:Bundarr

我有一个基于多个post\\u类型和分类法的查询,效果很好,但是我想增加一个复杂性级别,只查询特定分类法的分类法。

此查询按预期工作:

Array
(
    [topic] => global-reach
    [sections] => programs-and-services
    [regions] => ghana
    [post_type] => Array
        (
            [0] => publications
            [1] => media_releases
            [2] => page
        )
    [posts_per_page] => 10
)
现在,我只想选择分类“选项”设置为“设置为新闻项”的“页面”。。。这里是一个有点不合逻辑的伪查询,我想完成什么,但它应该能让人明白我的想法。

Array
(
    [topic] => global-reach
    [sections] => programs-and-services
    [regions] => ghana
    [post_type] => Array
        (
            [0] => aucc_publication
            [1] => aucc_media
            [2] => Array 
                     (
                       [post_type] => \'page\',
                       [options] => \'set-as-news-item\'
                     (
        )
    [posts_per_page] => 10
)
我可以使用上面的第一个查询,并在循环时过滤掉不需要的帖子,但我不能使用Wordpress的内置分页。

我对WP\\U查询的要求太高了,对吗?

1 个回复
SO网友:scribu

正如T31所说,您不能使用WP\\u Query directy来实现这一点。

您可以尝试使用“posts\\u子句”过滤器来修改WP\\u查询生成的各个SQL子句,但无论您如何操作,这都将非常棘手。

相反,替换整个SQL查询可能更容易。您可以使用get\\u tax\\u sql()处理分类部分(未测试):

function my_posts_request( $old_query, $wp_query ) {
    global $wpdb;

    $ptypes = $wp_query->get(\'post_type\');

    if ( \'page\' != $ptypes[2][\'post_type\'] )
      return $old_query; // This is not the WP_Query you are looking for

    // Do the conditional tax_query
    $tax_query = array(
      array(
        \'taxonomy\' => \'options\',
        \'terms\' => array( \'set-as-news-item\' ),
        \'field\' => \'slug\',
      )
    );

    $clauses = get_tax_sql( $tax_query, $wpdb->posts, \'ID\' );

    $join = "FROM $wpdb->posts {$clauses[\'join\']}";
    $where = "WHERE (
      post_type = \'aucc_publication\' OR 
      post_type = \'aucc_media\' OR 
      (post_type = \'page\' {$clauses[\'where\']})
    )";

    // Do the other tax query
    $tax_query = array(
      array(
        \'taxonomy\' => \'section\',
        \'terms\' => array( \'programs-and-services\' ),
        \'field\' => \'slug\',
      ),
      array(
        \'taxonomy\' => \'regions\',
        \'terms\' => array( \'ghana\' ),
        \'field\' => \'slug\',
      )
    );

    $clauses = get_tax_sql( $tax_query, $wpdb->posts, \'ID\' );

    $join .= $clauses[\'join\'];
    $where .= $clauses[\'where\'];

    return "SELECT $wpdb->posts.* $join $where ORDER BY post_date LIMIT 10";
}
add_filter( \'posts_request\', \'my_posts_request\' );
您仍然需要处理分页等问题。看看WP\\u Query是如何做到这一点的。

结束

相关推荐

WP 3.1让Tax_Query在Query_Posts()中工作

我正试图使用以下代码对我的自定义帖子使用多个自定义分类法进行筛选,但我的新代码一直是空的,即循环中没有帖子出现。其工作原理如下:用户从表单中的三个不同下拉列表中选择自定义分类法的术语“fttype”、“ftperiod”和“ftduration”,并将其传递给以下代码:我最初有这段代码(虽然没有分页),但我正在尝试实现的新代码无法使用WP 3.1内置的通过多个自定义分类进行过滤的功能(请参阅下面的新代码)。有人知道我做错了什么吗?这件事已经有一段时间了。。。谢谢osuOLD CODE// Set toda