我想查询使用WP_Query和meta_query参数的帖子:
$args = array(
'post_type' => 'produkty',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'produkt_aktywny',
'value' => '1',
'compare' => '='),
array(
'key' => 'produkt_dostepnosc',
'value' => '1',
'compare' => '=')
)
);
$query = new WP_Query( $args );
我应该补充订购其它两个键(“produkt_kategoria”和“produkt_cena”)的结果? 有没有什么办法在WP食品的,但这:
"Do you know how to sort the query if the meta_value is an array? Write it here :)"
根据这一点,我相信多元值进行排序是可能的。
我想表明从一个自定义后类型职位。 通过自定义字段顺序它,并添加参数,此处的其他自定义字段是一定值时,只显示一个选择职位。
例如。 选择custom_posts其中custom_field_a = xxxx,并通过custom_field_b顺序
我花了一段时间来弄清楚并为其搜索时,我一直在磕磕绊绊对这个职位。 因此,对于有同样的问题所有的人,这里要说的是终于做到了(简化)代码。
$args = array(
'post_type' => 'my_custom_post_type',
'meta_key' => 'custom_field_b',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'custom_field_a',
'value' => get_post_meta(get_the_ID(),'other_field',true),
'compare' => '='
)
),
);
$loop2 = new WP_Query($args);
你看,这是在循环,为此值是动态的循环。 当然,这可能是硬编码了。
希望它可以帮助别人!
我相信你有主的$ arg阵列中使用“meta_key”。 您可以通过meta值命令,但我不认为有一个在方式由2元值下令建造的。 您可以通过第二个字段(在这里,标题),只是没有第二个meta值字段(据我所知)订购。
$args = array(
'post_type' => 'produkty',
'meta_key' => 'produkt_kategoria',
'orderby' => 'meta_value title',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'produkt_aktywny',
'value' => '1',
'compare' => '='),
array(
'key' => 'produkt_dostepnosc',
'value' => '1',
'compare' => '=')
)
);
您可能需要编写一些SQL。 向下滚动此页上: http://wpquestions.com/question/show/id/1916
这也可以帮助: https://wordpress.stackexchange.com/questions/10941/how-do-you-use-orderby-with-meta-query-in-wordpress-3-1
<h3>Doing request</h3>
<?php
$query = new WP_Query($args);
unset($GLOBALS['wp_query']);
$GLOBALS['wp_query'] = $query;
?>
<br />
<br />
<h3>Request done but without sorting, all we need from that request is difficult mysql query $query->request. Next lets get this,modificate and do again</h3>
Principle is simple: explode and add mysql string which is needed<br />
<?php
//****************************************************************************************
/* THIS IS REQUEST WHICH I WRITE BY HANDS TO ATCHIVE THAT I NEED. VERY USEFULL TO DO THIS BEFO PROGRAMMING!
*
* SELECT wp_posts.ID FROM wp_posts
* INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
* INNER JOIN wp_postmeta featured ON (wp_posts.ID = featured.post_id)
* WHERE 1=1
* AND wp_posts.post_type = 'car'
* AND (wp_posts.post_status = 'publish')
* AND ( (wp_postmeta.meta_key = 'car_year'
* AND CAST(wp_postmeta.meta_value AS SIGNED) BETWEEN '1900' AND '2013') ) //DO NOT LOOK AT THIS, EXAMPLE
* AND ( (featured.meta_key = 'car_is_featured') )
* GROUP BY wp_posts.ID
* ORDER BY featured.meta_value ASC, wp_posts.post_modified_gmt DESC LIMIT 0, 20
*/
//step 1
$request = str_replace("SQL_CALC_FOUND_ROWS", "", $query->request); //remove unnecessary code
//step 2 - explode to insert mysql code for featured cars
$tmp_request_array1 = explode('WHERE 1=1', $request);
$tmp_request_array1[0].=" INNER JOIN $wpdb->postmeta featured ON ($wpdb->posts.ID = featured.post_id) ";
$request = $tmp_request_array1[0] . " WHERE 1=1 " . $tmp_request_array1[1]; //assemble request again
//step 3 - explode assembled request to order by meta values
$tmp_request_array1 = explode('ORDER BY', $request);
$tmp_request_array2 = explode($order, $tmp_request_array1[1]);
if ($orderby == 'post_modified_gmt') {
$request = $tmp_request_array1[0] . ' ORDER BY ' . "featured.meta_value DESC, $wpdb->posts.post_modified_gmt $order" . $tmp_request_array2[1];
} else {
$request = $tmp_request_array1[0] . ' ORDER BY ' . "featured.meta_value DESC, $wpdb->postmeta.meta_value $order" . $tmp_request_array2[1];
}
//step 4 - explode assembled request again to say that featured.meta_key is = 'car_is_featured'
$tmp_request_array1 = explode('GROUP BY', $request);
$request = $tmp_request_array1[0] . " AND ( (featured.meta_key = 'car_is_featured') ) " . " GROUP BY " . $tmp_request_array1[1];
//**********************************************************
//step 5 - DO OUR NEW MYSQL REQUEST, AND GET CARS ORDER WE NEED
$request_result = array();
$tmp = $wpdb->get_results($request, ARRAY_N);
foreach ($tmp as $value) {
$request_result[] = $value[0];
}
//***
?>
<br />
<br />
全文阅读这里