使用Pre_User_Query按元关键字值对WP_USER_QUERY排序

时间:2013-07-22 作者:deadlyhifi

我试图按用户的成员编号对用户进行排序,这是一个自定义的元值。看来我不能轻易地按meta_value. 我读过一些变通方法,但我无法理解。这是我目前的代码。。。

function sort_by_member_number( $vars ) {
    if ( isset( $vars->query_vars[\'orderby\'] ) && \'member-number\' == $vars->query_vars[\'orderby\'] ) {
        $vars = array_merge(
            $vars->query_vars, array(
                \'meta_key\' => \'arcc_member_number\'
            )
        );
    }
    return $vars;
}
add_filter( \'pre_user_query\', \'sort_by_member_number\' );
arcc_member_number 是一个数值-如何扩展它以按该值排序?

1 个回复
SO网友:s_ha_dum

如前所述,这不太可能起到任何作用。如果您添加几个var_dump是这样的:

function sort_by_member_number( $vars ) {
  var_dump($vars);
  if ( isset( $vars->query_vars[\'orderby\'] ) && \'member-number\' == $vars->query_vars[\'orderby\'] ) {
      $vars = array_merge(
          $vars->query_vars, array(
              \'meta_key\' => \'arcc_member_number\'
          )
      );
  }
  var_dump($vars);
  return $vars;
}
add_filter( \'pre_user_query\', \'sort_by_member_number\' );
您将注意到,在代码前后都没有发生任何更改,您将无法找到arrc_member_number 任何地方都有价值。而且,如果查看转储的数据,您会注意到已经构建了查询(仅示例查询):

["query_fields"]=>
  string(30) "SQL_CALC_FOUND_ROWS wp_users.*"
["query_from"]=>
  string(13) "FROM wp_users"
["query_where"]=>
  string(9) "WHERE 1=1"
["query_orderby"]=>
  string(28) "ORDER BY user_registered ASC"
["query_limit"]=>
  NULL
如果你look in the source 对于查询实际运行的位置,这些是使用的属性。

换句话说,pre_user_query 工作方式不同pre_get_posts. 您需要实际解析它query_* 值,这可能很棘手,意味着您需要熟练使用SQL。如果您可以这样编写用户查询。。。

$user_query = new WP_User_Query( 
  array ( 
    \'orderby\' => \'arcc_member_number\',
    \'meta_query\' => array(
        array(
            \'key\'     => \'arcc_member_number\',
            \'compare\' => \'EXISTS\'
        ),
    )
  ) 
);
。。。这会让你开始,但你仍然需要改变query_orderby 因为对你可以订购的东西有硬编码的限制。

function sort_by_member_number( $vars ) {
  if ( isset( $vars->query_vars[\'orderby\'] ) && \'arcc_member_number\' == $vars->query_vars[\'orderby\'] ) {
    $vars->query_orderby = \'ORDER BY arcc_member_number ASC\';
  }
  return $vars;
}
add_filter( \'pre_user_query\', \'sort_by_member_number\' );
您只需获得拥有arcc_member_number meta\\u键。如果需要所有用户,只需按该键排序,就需要更多的查询操作。

结束

相关推荐