特定组中用户的删除用户元数据

时间:2017-09-08 作者:Diana Rider

我有一个包含组ID和客户端ID的表,我想从属于特定groupID的多个clientID中删除usermeta“条件项”

Table group_client_ID

|group_ID|client_ID|
+--------+---------+
|   1    |    9    |          
|   1    |    10   |
|   2    |    11   |
|   2    |    12   |
|   3    |    14   |
|   3    |    17   |
|   4    |    18   |
|   5    |    20   |
|   6    |    21   |
|   6    |    22   |
|   7    |    25   |
|   8    |    34   |
这里是我删除usermeta“条件条款”的代码

运行时出现错误parameter expected to be string 1, array given.

function say_goodby_to_the_meta(){
$role = \'wpc_client\'; // assign role 
$users = get_users(\'role=\'.$role);

      foreach ($users as $user) {
        global $wpdb;
        $stats = $wpdb->get_results("
        SELECT ".$wpdb->prefix." client_group_clients.client_id
        FROM ".$wpdb->prefix." client_group_clients 
        WHERE ".$wpdb->prefix." client_group_clients.group_id IN (1, 2, 5, 6)
        ", $users);

        $stats = array();
        if (is_array($stats) || is_object($stats)){

          delete_user_meta($stat->ID, \'terms_and_conditions\');

            }
          echo \'Fini!\';
          }
      } 
FYI: 这是单击按钮的过程

1 个回复
最合适的回答,由SO网友:HU ist Sebastian 整理而成

对于$wpdb的工作方式,您的函数中似乎存在一些误解。

但是,我也不明白“client\\u id”列中到底是什么。是Wordpress的用户ID吗?

在任何情况下,请注意您的功能中的以下技术错误。

1: $wpdb->prefix返回在任何wordpress表中使用的前缀(如果未更改:“wp\\u”。如果您的表仅命名为“group\\u client\\u ID”,则无需将$wpdb->prefix放在前面。此外,如果您的表被调用,例如“wp\\u group\\u client\\u ID”,则SQL语句将错误,因为前缀与表名(“group\\u client\\u ID”)的“rest”之间存在空格

2: 您可以为$wpdb->get\\u results提供第二个参数,但此参数用于要返回的结果类型。您可以输入“OBJECT”,这将导致返回一个对象,也可以输入“ARRAY\\u A”/“ARRAY\\N”,这将导致返回一个(关联/数字索引)数组。我不太清楚你为什么把$用户放在那里,但这肯定不是它的工作方式。

3: 如果我理解正确,那么列client\\u ID就有wordpress用户ID,如果它们在组ID为1、2、5或6的行中,则应删除这些用户的元“terms\\u and\\u conditions”。那么,为什么要通过角色获取用户,为什么要使用foreach?这对我来说没有意义。

4: 如果我的上述假设是正确的,您可以通过一个简单的步骤来完成。警告:以下代码将从wordpress用户中删除meta\\u键“terms\\u and\\u conditions”,这些用户的用户ID位于“group\\u client\\u ID”表中,组ID为1、2、5或6。如果这不是预期的结果,不要使用它!

function say_goodby_to_the_meta(){
    global $wpdb;
    $deleted = $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE meta_key=%s AND user_id IN (SELECT client_id FROM group_client_ID WHERE group_ID IN (1,2,5,6))",\'terms_and_conditions\'));
    if($deleted === false){
        //There was an error in the query. Try Replacing "DELETE" with "SELECT" and checking the resulting Error in PHPMyAdmin 
    } else {
        echo \'The Terms and Conditions Meta Key was deleted for \'.$deleted.\' Users.\';
    }
}

结束

相关推荐

在Functions.php中正确地将首页的CSS-TEMPLATE_REDIRECT排队?

我想加载一些特定的css来更改WP首页/主页的主体元素的颜色。在我的主题函数文件中,以下代码似乎有效,但有人能告诉我它是否“正确”吗?//Adding and Encuing styles for Front Page add_action( \'template_redirect\', \'front_page_design\' ); function front_page_design(){ if ( is_front_page() || is_home())