如何在用户注册后立即将用户详细信息添加到不同的表中

时间:2016-10-04 作者:mesumosu

我有两个wordpress数据库表,我想在每次用户注册后自动向其中添加用户详细信息。各表如下:

mytbl_A:

+--------------+--------+------------------+------------+-----------+--------+--------+
| affiliate_id | name   | email            | from_date  | thru_date | status | type   |
+--------------+--------+------------------+------------+-----------+--------+--------+
|            2 | john   | admin@example.com| 2016-10-04 | NULL      | active | NULL   |
+--------------+--------+------------------+------------+-----------+--------+--------+
mytbl_A 说明:

+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| affiliate_id | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name         | varchar(100)        | NO   |     | NULL    |                |
| email        | varchar(512)        | YES  |     | NULL    |                |
| from_date    | date                | NO   |     | NULL    |                |
| thru_date    | date                | YES  |     | NULL    |                |
| status       | varchar(10)         | NO   | MUL | active  |                |
| type         | varchar(10)         | YES  |     | NULL    |                |
+--------------+---------------------+------+-----+---------+----------------+
还有另一张桌子mytbl_B

+--------------+---------+
| affiliate_id | user_id |
+--------------+---------+
|            2 |       2 |
+--------------+---------+
mytbl_B 说明:

+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| affiliate_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| user_id      | bigint(20) unsigned | NO   | PRI | NULL    |       |
+--------------+---------------------+------+-----+---------+-------+
用户注册时,我想将用户详细信息插入这两个表中。我尝试使用一个函数,但它不起作用,没有添加任何用户详细信息。

功能mytbl_A

function add_to_affuser($user_id) {
global $wpdb;
$user_info = get_userdata($user_id );
$wpdb->insert( \'mytbl_A\', array(\'mytbl_A.name\' => $user_info->user_login, \'mytbl_A.email\' => $user_info->user_email ), array(\'%s\', \'%s\') ); 
}
add_action( \'user_register\', \'add_to_affuser\');
功能mytbl_B

function add_to_aff($user_id) {  
global $wpdb;
$user_info = get_userdata($user_id);  
$wpdb->insert( \'mytbl_B\', array(\'mytbl_B.user_id\' => $user_info->ID ), array(\'%d\') ); 
}
add_action( \'user_register\', \'add_to_aff\');
两个表都没有添加任何内容。

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

使用时从列名中删除表名$wpdb->insert() 对我有效的是:

function add_to_affuser($user_id) {
    global $wpdb;
    $user_info = get_userdata($user_id );
    $wpdb->insert( \'mytbl_A\', array(\'name\' => $user_info->user_login, 
              \'email\' => $user_info->user_email ), array(\'%s\', \'%s\') ); 
}
add_action( \'user_register\', \'add_to_affuser\');

function add_to_aff($user_id) {  
    global $wpdb;
    $user_info = get_userdata($user_id);  
    $wpdb->insert( \'mytbl_B\', array(\'user_id\' => $user_info->ID ), array(\'%d\') ); 
}
add_action( \'user_register\', \'add_to_aff\');
在尝试复制报告的问题时,我注意到使用dbDelta() (以及提供的数据库描述)尽管尝试使用AB. 我也有点不确定前缀是如何根据您的代码设置的。

这里有一个包含数据库创建部分的演示插件。自定义表是在插件激活时创建的。添加新用户时,将更新自定义DB表。

<?php
/*
Plugin Name: WPSE update custom tables when adding user
Plugin URI: http://wordpress.stackexchange.com/questions/241560
Description: 
Version: 0.0.1
Author:
Author URI:
License: GPL2/Creative Commons
*/

/**
 * Create the database tables upon activation of this plugin
 * 
 */
register_activation_hook( __FILE__, \'wpse241560_db_install\' );
function wpse241560_db_install() {
    global $wpdb;

    $charset_collate = $wpdb->get_charset_collate();


    $sql_affuser = "CREATE TABLE {$wpdb->prefix}affuser (
        affiliate_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
        name varchar(100) NOT NULL,
        email varchar(512) NULL,
        from_date date NULL,
        thru_date date NOT NULL,
        status varchar(10) DEFAULT \'active\' NOT NULL,
        type varchar(10) NULL,
        PRIMARY KEY  (affiliate_id),
        KEY status (status)
    ) $charset_collate;";

    $sql_aff = "CREATE TABLE {$wpdb->prefix}aff (
        affiliate_id bigint(20) unsigned NOT NULL,
        user_id bigint(20) unsigned NOT NULL,
        PRIMARY KEY  (affiliate_id, user_id)
    ) $charset_collate;";

    require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );

    dbDelta( $sql_affuser );
    dbDelta( $sql_aff );
}


/**
 * Update affuser table after adding a new user 
 */
add_action( \'user_register\', \'wpse241560_add_to_affuser\');
function wpse241560_add_to_affuser( $user_id ) {
    global $wpdb;
    $user_info = get_userdata( $user_id );

    $wpdb->insert( "{$wpdb->prefix}affuser",
                    array(
                      \'name\'  => $user_info->user_login,
                      \'email\' => $user_info->user_email
                    ),
                    array( \'%s\', \'%s\' ) ); 
}

/**
 * Update aff table after adding a new user 
 */
add_action( \'user_register\', \'wpse241560_add_to_aff\' );
function wpse241560_add_to_aff( $user_id ) {  
    global $wpdb;
    $user_info = get_userdata( $user_id );

    $wpdb->insert( "{$wpdb->prefix}aff",
                     array(
                        \'user_id\' => $user_info->ID
                     ),
                     array( \'%d\' ) ); 
}

相关推荐

打开多个帖子编辑器页面时,MySQL CPU使用率激增

我正在管理WordPress server 2Core CPU 8Gb Ram,托管在Openlitespeed+MariaDB 11.4和PHP 7.4上。已安装Redis和OPache。在WordPress网站上,Redis Object Cache 和Litespeed LSCache 是否已安装并启用插件。内存限制:512MB,最大执行时间:120该网站有超过140k篇帖子,浏览网站页面和内容是一种流畅的体验。但问题是,每当编辑器登录创建帖子时,CPU使用率就会激增到90%或更多。和wp管理员/新