【问题标题】:Create a new wp data table based on wp_usermeta table根据 wp_usermeta 表新建 wp 数据表
【发布时间】:2021-12-03 23:37:12
【问题描述】:

第一次在子站点上激活某个插件时,我需要将某些数据从 wp_usermeta 复制到新表中。到目前为止,我可以按预期打印 $admin_ids,但不知道如何或是否可以在 SQL 的 IN 语句中使用这些值。到目前为止,还没有使用以下方法创建表。

问题是,如何正确编写此 SQL 查询,以便在函数运行时,基于 wp_usermeta 表创建一个新表,其中当前博客管理员的 ID 等于 wp_usermeta.user_id。

当我运行该函数时,我没有收到任何错误、警告或通知,wp 只是永远停止。

这是我的代码。

function create_blog_usermeta_table(){
 if(function_exists('other_plugin_function')){
        global $wpdb;
        
        $charset_collate = $wpdb->get_charset_collate();

     // WP_User_Query arguments
        $args = array(
            'role' => 'Administrator', 
            'fields' => 'ID' 
        );

        // The User Query
        $user_query = new WP_User_Query( $args );

        // Get the results
        $admins = $user_query->get_results();
        
        //Extract and format admin ids from the results
        $admin_ids = wp_list_pluck( $admins, 'ID', 'ID');
        $admin_ids = implode( ',', $admin_ids );

        
    $usermeta_table = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}_usermeta AS
        SELECT *
        FROM wp_usermeta
        Where user_id IN ($admin_ids)";

    }

}

【问题讨论】:

  • 那么你打算用 $usermeta_table 做什么

标签: php sql wordpress


【解决方案1】:

这行得通。

 //Create blog usermeta table containing usermeta for the current blog's users.
function create_blog_usermeta_table(){

   
        global $wpdb;
        
        $charset_collate = $wpdb->get_charset_collate();

        // WP_User_Query arguments
        $args = array(
            'role' => 'Administrator', 
            'fields' => 'ID' 
        );

        // The User Query
        $user_query = new WP_User_Query( $args );

        // Get the results
        $query = $user_query->get_results();
        $admin_ids = wp_list_pluck( $query, 'ID', 'ID');
        $admin_ids = implode(',', $admin_ids);
        
        // Create new usermeta table for the blog users.
        $usermeta_table = "
        CREATE TABLE IF NOT EXISTS {$wpdb->prefix}usermeta AS
        SELECT *
        FROM wp_usermeta
        Where user_id IN ($admin_ids)";

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
    dbDelta( $usermeta_table );
    }
register_activation_hook( MY_PLUGIN_PATH . '/my-plugin.php', 'create_blog_usermeta_table' );

【讨论】:

    【解决方案2】:

    之前的解决方案没有复制索引。这个可以。

     //Create blog usermeta table containing usermeta for the current blog's users.
    function create_blog_usermeta_table(){
        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
            global $wpdb;
            
            $charset_collate = $wpdb->get_charset_collate();
    
         // WP_User_Query arguments
            $args = array(
                'role' => 'Administrator', 
                'fields' => 'ID' 
            );
    
            // The User Query
            $user_query = new WP_User_Query( $args );
    
            // Get the results
            $admins = $user_query->get_results();
            $user_ids = wp_list_pluck( $admins, 'ID', 'ID');
            $user_ids = implode(',', $user_ids);
            $new_table = $wpdb->prefix . 'usermeta';
            // Create new usermeta table for the blog users.
            $usermeta_table ="CREATE TABLE  `{$wpdb->prefix}usermeta` LIKE wp_usermeta;
      
            INSERT `{$wpdb->prefix}usermeta` SELECT * FROM wp_usermeta WHERE user_id IN ($user_ids);";
    
        dbDelta( $usermeta_table );
        maybe_create_table( $wpdb->prefix . 'usermeta', $usermeta_table );
        }
    

    【讨论】:

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