如何在WordPress中获取具有特定元值的帖子的所有自定义术语?

时间:2014-03-26 11:33:37

标签: wordpress-plugin wordpress

我有大约6000个具有不同元值的帖子到微粒键“CC101_type”。 现在我想获取具有特定元值的那些帖子的所有条款。

    $args = array(
        'post_type'         => 'coupon',
        'posts_per_page'    => -1,
        'meta_query'        => array(
                'relation' => 'AND',
            array(
                'key'       => 'CC101_deactive',
                'value'     => "off",
            ),
            array(
                'Key'       => 'CC101_type',
                'value'     => 'Deals'
            )
        )
    );


    $query      = new WP_Query($args);
    $all_categories = array();
        foreach($query->posts as $post=>$p){
            $id = $p->ID;
            $terms = wp_get_post_terms( $id, 'coupon_category', array("fields" => "all") );
            foreach($terms as $k => $cat){
        $all_categories[$cat->term_id] = $cat->name;
        }
    }

我尝试通过首先根据元值获取所有帖子来完成上述任务,然后获得条款。 但当我将所有帖子'posts_per_page' => -1,限制在另一方时,它将其限制为20个帖子开始工作时,它什么都没有返回。

还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用以下自定义查询: -

global $wpdb;
$args = "SELECT * FROM $wpdb->posts 
    INNER JOIN ' . $wpdb->postmeta . ' AS PM1 ON ('.$wpdb->posts.'.ID = PM1.post_id)
    INNER JOIN ' . $wpdb->postmeta . ' AS PM2 ON ('.$wpdb->posts.'.ID = PM2.post_id)
WHERE $wpdb->posts.`post_type` = 'coupon' 
    AND (PM1.meta_key = 'CC101_deactive' AND PM1.meta_value='off')
    AND (PM2.meta_key = 'CC101_type' AND PM2.meta_value='Deals')
    AND $wpdb->posts.`post_status` = 'publish' 
ORDER BY $wpdb->posts.`ID`";

$loop = $wpdb->get_results( $args );
foreach ($loop as $post)
{
    //Here $post is single post object.
    //Do your action.
}

根据您的需要更改查询。

希望它会有所帮助。