【问题标题】:How to sort multiple wordpress custom field values?如何对多个 wordpress 自定义字段值进行排序?
【发布时间】:2012-09-22 16:14:55
【问题描述】:

显示按“价格”自定义字段排序的“产品”类型的帖子:

$query = new WP_Query( 
                      array ( 'post_type' => 'product', 
                              'orderby' => 'meta_value', 
                              'meta_key' => 'price' ) 
                     );

如果还想按“尺寸”订购,我应该使用哪个代码?

另一个示例,我需要对自定义字段进行多次排序:

显示具有“事件”类型的帖子,按“Start_Hour”排序,然后按“Start_Minute”排序。

【问题讨论】:

    标签: wordpress sorting custom-type


    【解决方案1】:

    如果您的自定义字段之一是 meta_key 而另一个是表的普通列,则不需要任何过滤器或挂钩来对多个自定义字段进行排序,而不是在查询中使用这些参数/参数。

    'meta_key' => 'KEY_NAME',
    'orderby' => 'meta_value_num SECOND_COLUMN_NAME',
    'order' => 'ASC' or 'order' => 'DESC'
    

    这里meta_value_numSECOND_COLUMN_NAME的顺序很重要,根据顺序你可能会看到不同的2结果。

    【讨论】:

    • 这将仅按KEY_NAME 排序。 orderby 起作用的唯一方法是如果 SECOND_COLUMN_NAME 不是自定义字段,则无法回答此问题。
    【解决方案2】:

    我认为这在 Wordpress 3.7 中略有改变。

    我不得不改变

    return str_replace('menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);
    

    进入

    return str_replace('wp_posts.menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);
    

    感谢您的初步解决方案! [已编辑]

    【讨论】:

      【解决方案3】:

      感谢Bainternet我找到了解决办法:

      function orderbyreplace($orderby) {
          return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby);
      }
      

      还有……

      $args = array(
        'post_type'=>'Events',
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'meta_query' => array(
              array(
                  'key' => 'Start_Hour',
                  'value' => '',
                  'compare' => 'LIKE'
              ),
              array(
                  'key' => 'Start_Minute',
                  'value' => '',
                  'compare' => 'LIKE'
              )
          )
      );
      
      add_filter('posts_orderby','orderbyreplace');
      $loop = new WP_Query( $args );
      remove_filter('posts_orderby','orderbyreplace');
      

      【讨论】:

      • 这似乎不起作用,因为首先查询找到的行数。 SELECT SQL_CALC_FOUND_ROWS zmw_posts.ID FROM
      【解决方案4】:

      这是一个使用多个 meta_key 和 orderby 的示例,我认为应该可以:

      $params = array(
      'post_type' => 'product',
      'meta_query' => array(
          array(
                  'key' => 'price',
                  'value' => '',
                  'compare' => 'LIKE'
          ),
          array(
                  'key' => 'size',
                  'value' => '',
                  'compare' => 'LIKE'
          )
      ),
      'orderby' => 'price size',
      'order' => 'ASC'
      );
      $query = new WP_Query;
      $resulting_obj = $query->query($params);
      

      您需要更多地使用 meta_query 项目,尤其是“value”参数。请仔细查看“自定义字段参数”部分中的http://codex.wordpress.org/Class_Reference/WP_Query

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        相关资源
        最近更新 更多