希望有人可以提供帮助,我正在为竞赛做准备 - 用户可以猜测逃避现实主义者执行某个行为所需的时间,因此您将拥有以下情形: / p>
法案1 - 逃避学家在2分30秒内完成
假设您有5个猜测:
姓名1:1分20
姓名2:2分钟20
姓名3:5分50
姓名4:6分10
姓名5:3分40
当逃避现实主义者完成后,他们希望能够显示前四名的结果,所以在这种情况下它将是:
姓名2:2分钟20
姓名1:1分20
姓名5:3分40
姓名3:4分50
我现在正在使用WordPress,所以我的查询是
$args = array(
'post_type' => 'entry',
'posts_per_page' => 4,
'order' => 'ASC',
'orderby' => 'meta_value_num',
'meta_key' => 'in_seconds',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'act',
'value' => $post->ID,
'compare' => '=',
),
array(
'key' => 'in_seconds',
'value' => $seconds,
'type' => 'numeric',
'compare' => '>=',
),
),
);
这让我得到了最接近的值,但前提是它们更高,而不是更低。 显然我更喜欢使用wp_query有一种方法可以做到这一点,但如果有人知道这样做的方法(即使它是一个沉重的多循环) - 我会永远感激!
作为参考,所有猜测都会在几秒钟内存储在数据库中。
希望你能帮忙! 谢谢, 安迪:)
答案 0 :(得分:0)
我担心只使用简单的WP_Query就无法达到你想要的效果。虽然您应该能够通过帖子秒与所需秒之间的差异的绝对值来定位帖子。您的代码将类似于:
$args = array(
'posts_per_page' => 4,
'order' => 'ASC',
'orderby' => 'meta_value_num',
'meta_key' => 'in_seconds',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'act',
'value' => $post->ID,
'compare' => '=',
),
),
);
posts_orderby过滤器可更改订单行为:
global $seconds_where;
$seconds_where = $seconds;
function seconds_posts_orderby( $orderby ) {
$orderby = " ABS($seconds - meta_value) ASC";
return $orderby;
}
add_filter('posts_orderby', 'seconds_posts_orderby');
$my_query = new WP_Query($args);
remove_filter('posts_orderby', 'seconds_posts_orderby');
这只是一个开始,但我希望这会有所帮助。