在wp_query中,是否可以构建一个复杂的查询,以便我可以通过条件或计算字段进行排序? 我试图做的就像MySql中的下一个查询:
SELECT *, field1, field2
case when field1+field2 > some_value then 1 else 2 end as my_alias
FROM my_table
ORDER BY my_alias ASC
我想使用wp_query构建这样的查询,这可能吗?如果是的话,我该怎么做呢?
答案 0 :(得分:2)
是的,你需要
答案 1 :(得分:1)
我没有看到任何方法使用单个WP_Query
执行此操作,因为meta_query
不允许您具有此类灵活性,但您可以执行三个不同的查询然后合并它们(未经测试的代码):
// Get ongoing events
$ongoing = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '<=',
'type' => 'DATE'
),
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '>=',
'type' => 'DATE'
)
)
));
foreach($ongoing as $key => $ongoing_post) {
$ongoing_post->event_status = 'ongoing';
$ongoing[$key] = $ongoing_post;
}
// Get upcoming events
$upcoming = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '>',
'type' => 'DATE'
)
)
));
foreach($upcoming as $key => $upcoming_post) {
$upcoming_post->event_status = 'upcoming';
$upcoming[$key] = $upcoming_post;
}
// Get past events
$past = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '<',
'type' => 'DATE'
)
)
));
foreach($past as $key => $past_post) {
$past_post->past_status = 'past';
$past[$key] = $past_post;
}
// Merge'em all
$events = array_merge($ongoing, $upcoming, $past);
使用meta_query
将元值与实际日期进行比较(您可能希望根据它们在date_from
和date_to
字段中的存储方式来更改日期格式),并在向所有帖子对象添加属性后立即执行一个小循环,右侧event_status
可以在显示帖子时使用。
也许有一种聪明的方法可以通过WP_Query filters实现这一目标,但需要在WP_Query
源代码中进行更深入的调查,因为它并没有真正记录在代码内。
答案 2 :(得分:0)
我使用的东西,试试这个,
<% function foo (timeout, callback) { %>
<% setTimeout(function () { %>
<% callback(null, [1, 2, 3, 4]; %>
<% }, timeout); %>
<% } %>
<% var Deasync = require("deasync") %>
<% var fooSync = Deasync(foo) %>
<ul>
<% supplies = fooSync(1000); %>
<% for(var i=0; i<supplies.length; i++) {%>
<li><%= supplies[i] %></li>
<% } %>
<% }, 1000) %>
</ul>
看看这个Click Here