如何根据元值组合对自定义WordPress查询进行排序?

时间:2014-03-20 作者:user1399181

我正在尝试构建一个自定义查询,它是自定义键值的组合。例如,使用下面的代码,我可以根据收到的金额(paidusd)和收到的小费(totaltips)对我的帖子进行排序。这段代码运行得很好。

但我想做的是为“最有利可图”添加另一种类型,即paidusd与totaltips的比率。我在哪里执行除法方程?我被难住了。

非常感谢您的帮助-谢谢!!!!

if ( $_GET[\'sort\'] == \'mostexpensive\'){
    //query_posts(\'&meta_key=paidbtc&orderby=meta_value\');
    $args = array(
                   \'meta_key\' => \'paidusd\',
                   \'orderby\' => \'meta_value\',
                   \'posts_per_page\' => 10,
                   \'paged\' => $paged
                   );
    query_posts($args);
}

if ( $_GET[\'sort\'] == \'mosttipped\'){
    $args = array(
                   \'meta_key\' => \'totaltips\',
                   \'orderby\' => \'meta_value\',
                   \'posts_per_page\' => 10,
                   \'paged\' => $paged
                   );
    query_posts($args);
}

1 个回复
SO网友:s_ha_dum

您想要做的是可能的--MySQL可以做数学--但是WP_Query 本机无法处理此问题。您需要应用一两个过滤器。您最终会对生成的值进行排序,这不是特别有效。也就是说,MySQL将读取表中这两个键的所有行,进行一些计算,然后排序。

我的建议是存储第三把钥匙,profitability-- 当您保存post键,然后对其进行排序,而不是试图生成它时,这就是SQL。非常粗糙的东西,像这样:

function generate_profitability_wpse_138683($meta_id,$object_id,$meta_key,$_meta_value) {

  if (\'paidusd\' === $meta_key) {
    $tips = get_post_meta($object_id,\'totaltips\');
    if (!empty($tips)) {
      $profit = (int)$_meta_value/(int)$tips;
    }
  } elseif (\'totaltips\' === $meta_key) {
    $paid = get_post_meta($object_id,\'paidusd\');
    if (!empty($paid)) {
      $profit = (int)$paid/(int)$_meta_value;
    }
  }

  if (!empty($profit)) {
    update_post_meta($object_id,\'profitability\',$profit);
  }
}
add_action(\'updated_post_meta\',\'generate_profitability_wpse_138683\',10,4);

结束

相关推荐

Categories sorting

我正在使用下面的代码来弹出自定义帖子类型及其类别,所以类别1---岗位1---岗位2第二类——岗位1——岗位2——岗位3等。这对我来说很好,但是我希望能够按count对我的类别进行排序,所以orderby=count,这样,在我下面的代码中不起作用的时候,具有大量帖子的类别将排在列表的顶部,知道为什么吗?非常感谢您的帮助 <?php // List posts by the terms for a custom taxonomy of any post type