如何在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个帖子时,它开始工作。

还有别的办法吗?

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

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.
}

根据需要更改查询。

最新更新