按最近的数值对帖子进行排序

时间:2012-05-10 作者:Sam

我使用自定义帖子类型来显示属性,并为每个帖子指定了一个自定义价格字段。在属性页上,我想显示四个价格类似的属性列表,其中两个小于或等于当前属性的价格,两个大于当前价格。使用wp\\U查询按价格数字排序属性很容易,但如何仅显示与当前属性价格最接近的值?

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

一种可能是类似的直接SQL查询given here.

但我不相信它会比2个查询更高效,所有查询都由WordPress处理:

未测试

$price =0; //Price of current property
$id=0; //Property (post) ID.

$args = array(
    \'post_type\' => \'property\',
    \'post__not_in\'=>array($id),
    \'posts_per_page\'=> 2,
    \'meta_query\' => array(array(
        \'key\' => \'price\',
        \'value\' => $price,
        \'type\' => \'numeric\',
        \'compare\' => \'>=\'
        )),
     \'meta_key\'=> \'price\',
     \'orderby\'=>\'meta_value_num\',
     \'order\'=>\'ASC\'
    );

 $two_above = get_posts($args);

 //Put their IDs along with current property ID in an array
 $ids = array_values(wp_list_pluck($two_above, \'ID\'));
 array_push($ids, $id);

 //Exclude returned properties and current property from next query
 $args[\'post__not_in\'] = $ids;

 $args[\'meta_query\'][\'compare\'] = \'<=\';
 $args[\'order\'] = \'DESC\';

 $two_below = get_posts($args);

SO网友:Alex Lane

编辑

谢谢你给我打电话,这是唯一能让我变得更好的方法。

更新后的查询如下所示:

$args = array(
    \'post_type\' => \'POST\',
    \'meta_query\' => array(
        \'key\' => \'PRICE\',
        \'value\' => array( ($price - 2), ($price + 2)),
        \'type\' => \'numeric\',
        \'compare\' => \'BETWEEN\'
        );
    );
再次感谢凯撒让我做正确的事。

最快的方法是使用$wpdb. 最基本的功能如下所示:

function my_custom_get ($price) {
    global $wpdb;
    $min_price = $price - 2;
    $max_price = $price + 2;

    $sql_query = "
        SELECT $wpdb->posts.* 
        FROM $wpdb->posts, $wpdb->postmeta
        WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
        AND $wpdb->postmeta.meta_key = \'PRICE\' 
        AND $wpdb->postmeta.meta_value < $max_price
        AND $wpdb->postmeta.meta_value > $min_price
        AND $wpdb->posts.post_status = \'publish\' 
        AND $wpdb->posts.post_type = \'PRODUCT\'
        AND $wpdb->posts.post_date < NOW()
        ORDER BY $wpdb->posts.post_date DESC
        ";
    return $wpdb->get_results($querystr, OBJECT);
}
不要忘记更改meta_keypost_type 以适合您的特定应用。希望这有帮助!

结束

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph