【问题标题】:Custom query to order post by two meta value自定义查询以按两个元值排序帖子
【发布时间】:2015-01-22 11:29:33
【问题描述】:

我有房产列表网站。我知道如何按元值对帖子进行排序,但我的情况不同,属性有两个价格元字段-

  1. 正常价格

  2. 折扣价

我可以按正常价格或折扣价对帖子进行排序,但我希望 WordPress 将两个元值视为一个值,因此如果两个属性 A 和 B 分别具有 4000 美元和 5000 美元正常价格但 B 具有折扣价 3500 美元然后 B应该在 A 之前。

$args = array(
            'post_type'         => 'listing',
            'posts_per_page'    => 15,
            'paged'             => $paged,
            'meta_key'          => $meta_prefix . 'price',
            'orderby'           => 'meta_value_num',
            'order'             => 'ASC'
        );
$listings = new WP_Query($args);

第二个元键是$meta_prefix.'discounted_price'

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • 对于原油期权,按正常价格+折扣价排序。如果您希望订单以某种方式偏向某个价格,那么您必须指定该偏向。
  • 我是 wordpress 的初学者,我可以按正常价格邮寄排序,但我不知道如何按正常价格 + 折扣价订购。
  • 没有wordpress的经验,但是如果你有使用sql的权限,那么就在查询的最后加上ORDER BY (normal_price + discounted_price)
  • @user2839914 。 . .尝试编辑您的问题并显示按正常价格排序的查询。

标签: php mysql wordpress


【解决方案1】:

首先您需要创建以下函数,它允许您按两个字段排序:

你可以把它放在文件函数中:

function customorderby($orderby) {
   return 'mt1.meta_value, mt2.meta_value ASC';
}

在将过滤器添加到该函数之前的 WP_Query 之后以及完成删除后,示例:

add_filter('posts_orderby','customorderby');
$wp_query = new WP_Query(array(
    'post_type'    => 'listing',
    'posts_per_page'    => 15,
    'paged'             => $paged,
    'meta_key'     => $meta_prefix . 'price',
    'meta_query'  => array(
        array(
            'key' =>  $meta_prefix . 'price',
        ),
        array(
           'key' => $meta_prefix.'discounted_price',
       )
    )
));
remove_filter('posts_orderby','customorderby');

【讨论】:

  • 谢谢,虽然我之前解决了我的问题。我用同样的方法。再次感谢你:)
猜你喜欢
  • 1970-01-01
  • 2019-08-28
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多