首页 > 解决方案 > 创建触发器以将新用户添加到 wordpress

问题描述

每次创建新用户时,我都需要将用户全名添加到 buddy press 扩展配置文件字段。这是正常功能,但我们正在从 Active Directory 同步用户,并且在运行时不会填充用户名。我创建了一个 SQL 查询,用于组合名字和姓氏并将其更新到我需要的位置。尝试在 phpMyAdmin 中创建触发器时出现了我的问题。

这是我收到的错误:

以下查询失败:

CREATE TRIGGER `update users` 
AFTER UPDATE ON `wp_bp_xprofile_data` 
FOR EACH ROW 
CREATE TEMPORARY TABLE user_data AS 
 SELECT u.user_id
   , (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name
  , (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name
  , (SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name
  , (SELECT CONCAT(first_name, ' ', last_name)) AS full_name 
  FROM wp_bp_xprofile_data u ; 
  UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id 
  SET u.value=b.full_name;"

MySQL 说:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 12 行的“UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id”附近使用正确的语法

这是我使用的代码。

CREATE TEMPORARY TABLE user_data AS
  SELECT
  u.user_id,
  (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name,
  (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name,
  (SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name,
  (SELECT CONCAT(first_name, ' ', last_name)) AS full_name
FROM
  wp_bp_xprofile_data u
 ;

UPDATE wp_bp_xprofile_data u
  JOIN user_data b
    ON u.user_id=b.user_id 
  SET u.value=b.full_name;

触发输入

标签: phpmysqlwordpress

解决方案


您尚未输入 BRGIN 或 ENd

尝试

DELIMITER //

CREATE TRIGGER `update users` 
AFTER UPDATE ON `wp_bp_xprofile_data` 
FOR EACH ROW 
BEGIN
CREATE TEMPORARY TABLE user_data AS 
 SELECT u.user_id
   , (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'first_name' LIMIT 1) AS first_name
  , (SELECT meta_value FROM wp_usermeta WHERE user_id = u.user_id AND meta_key = 'last_name' LIMIT 1) AS last_name
  , (SELECT `value` FROM wp_bp_xprofile_data WHERE user_id = u.user_id AND field_id = '1' LIMIT 1) AS bp_name
  , (SELECT CONCAT(first_name, ' ', last_name)) AS full_name 
  FROM wp_bp_xprofile_data u ; 
  UPDATE wp_bp_xprofile_data u JOIN user_data b ON u.user_id=b.user_id 
  SET u.value=b.full_name;
END //

DELIMITER ;

但我不确定触发器是否会起作用,它只会删除语法错误。

据我所知,你不能更新调用触发器的表,因为你的更新也会调用一个新的触发器等等。


推荐阅读