Как добавить данные пользователя в разные таблицы сразу после регистрации пользователя

У меня есть две таблицы базы данных 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'); 

ничто не добавляется ни к одной из таблиц.

Solutions Collecting From Web of "Как добавить данные пользователя в разные таблицы сразу после регистрации пользователя"

Удаление имен таблиц из имен столбцов при использовании $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() проблему я заметил, что таблицы, созданные с использованием dbDelta() (и предоставленного описания базы данных), имели имена нижнего регистра, несмотря на попытки использовать A и B Я был немного уверен в том, как префиксы были настроены на основе вашего кода.

Вот демо-плагин, который также включает в себя часть создания базы данных. Пользовательские таблицы создаются при активации плагина. Таблицы пользовательских БД будут обновляться при добавлении нового пользователя.

 <?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' ) ); }