按自定义列而不是元键筛选用户

时间:2019-10-07 作者:wafa_zitouna

我想添加自定义过滤器,其中包含来自users表的自定义列,而不是元键。我发现此函数要通过元键进行过滤:

add_filter(\'pre_get_users\', \'filter_users_by_job_role_section\');

function filter_users_by_job_role_section($query)
{
 global $pagenow;
 if (is_admin() && \'users.php\' == $pagenow) {
  // figure out which button was clicked. The $which in filter_by_job_role()
  $top = $_GET[\'job_role_top\'];
  $bottom = $_GET[\'job_role_bottom\'];
  if (!empty($top) OR !empty($bottom))
  {
   $section = !empty($top) ? $top : $bottom;

   // change the meta query based on which option was chosen
   $meta_query = array (array (
      \'key\' => \'membership_user_role\',
      \'value\' => $section,
      \'compare\' => \'LIKE\'
   ));

 $query->set(\'meta_query\', $meta_query);

  }
 }
}
我想将查询更改为使用comumn表“user\\u status”。请告诉我怎么做。

1 个回复
SO网友:Tom J Nowell

This isn\'t possible with custom table columns, 而且,您应该避免对WP核心表进行自定义修改。相反,将此数据存储在用户meta中,而不是自定义表列中。

下次更新WordPress时,如果数据库架构将发生更改,WP将调整表以匹配,从而销毁自定义列及其包含的所有数据(否则更新将失败)。

您尝试使用的API用于这些用户元值,您可以像post meta一样调整用户元:

  • add_user_meta
  • update_user_meta
  • get_user_meta
  • delete_user_meta
您可以通过使用这些来简化代码,它将允许您消除调整表和保存/获取信息所需的原始SQL,并允许您按预期使用WP API。

记住,永远不要修改WP Core来更改WP,这包括表列

相关推荐

在wp_USERS上添加wp_usermeta的自定义SQL查询

我试图使用SQL in()查询WordPress中的用户id列表,并在wp\\u usermeta表中的meta\\u键“is\\u registered”上添加meta\\u值为“Yes”的用户id,但我似乎无法实现这一点。它只返回0个结果。如果我只将IN()与ID的数组一起使用,则效果很好。以下是我正在使用的内容:SELECT DISTINCT wp_users.ID FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.