希望有人能帮忙,我目前正在为比赛做一个构建 - 目标是让用户猜测逃脱者执行行为所需的时间,所以你会有以下场景:
第一幕 - 逃脱者在2分30秒内完成
假设您有 5 个猜测:
名称 1: 1分钟 20
名称 2: 2分钟 20
名称 3: 5分钟 50
名称 4: 6分钟 10
名称 5: 3分钟 40
当逃脱者完成后,他们希望能够显示前 4 个结果,所以在这种情况下,它将是:
名称 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来做到这一点,但如果有人知道一种方法(即使它是一个繁重的多重循环) - 我将永远感激不尽!
作为参考,所有猜测都在几秒钟内存储在数据库中。
希望你能帮上忙!谢谢安迪·:)
恐
怕仅使用简单的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');
这只是一个开始,但我希望这有所帮助。