基于这些评论,我想我应该在查询本身之外实现这一点,并使用PHP过滤结果。我也会给你第二个解决方案,但我认为第一个更容易理解(稍后再讨论)。
由于我不知道您的代码的细节,这里有一种伪代码方法。
$unique_fields_array = array();
// you loop will contain all custom post types regardless of custom field values
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
// get the custom field for this specific post
$meta_value = get_post_meta( $the_query->post->ID, \'size\', true );
// if we\'ve never output a post with this custom field value yet, do it now, and then add it to the unique_fields_array
if ( !in_array($meta_value, $unique_fields_array) ) {
// OUTPUT YOUR POST CONTENT HERE
$unique_fields_array[] = $meta_value;
}
}
}
// restore original postdata
wp_reset_postdata();
第二种解决方案是将WP\\u查询全部绕过(我不建议这样做,但这里还是这样)。
global $wpdb;
$values = $wpdb->get_results("SELECT DISTINCT meta_value FROM $wpdb->postmeta pm, $wpdb->post p WHERE meta_key = \'size\' and pm.post_id=p.ID and p.post_type=\'my_custom_postype\' ", ARRAY_A);
然后可以循环
$values
在PHP中,它们将只包含大小唯一的记录。当然,您可以使用排序、附加过滤器等自定义此SQL。