我正在尝试将一个用户添加到一个特定的博客中,其角色由用户在注册时选择。
我可以通过以下方式向meta添加所需的角色:
add_filter( \'add_signup_meta\', \'add_register_meta\' );
public function add_register_meta($meta = array()) {
$role = sanitize_text_field( $_POST[\'role\'] );
$meta[\'role\'] = $role;
return $meta;
}
我可以在数据库的注册表中看到序列化的元。因此,我尝试将具有该角色的用户添加到特定博客:
add_action ( \'wpmu_activate_user\', \'assign_user_to_blog\' );
public function assign_user_to_blog($user_id, $password, $meta ) {
if ( isset($meta[\'role\']) ) {
add_user_to_blog( 3, $user_id, $meta[\'role\']);
} else {
add_user_to_blog( 3, $user_id, "dmd");
}
}
但当用户被激活时,什么都不会发生。用户未添加到日志。
我注意到一个奇怪的现象是,用户同时收到激活电子邮件和带有密码的电子邮件。这就像用户是自动激活的,而不是通过电子邮件中的激活密钥。这可能是问题所在吗?为什么会这样?
UPDATE: 我把插件改成了mu插件,现在大部分都可以使用了。
用户被添加到blog 3,但不是使用meta中的角色,而是使用“dmd”角色。
有没有办法查看$meta的价值?var\\u dump不工作。
最合适的回答,由SO网友:birgire 整理而成
关于您问题中的更新部分:
我认为这里的问题是你在你的add_action()
设置。
如果您查看Codex, 用法是:
add_action( $hook, $function_to_add, $priority, $accepted_args );
默认情况下,其中
$priority = 10
和
$accepted_args = 1
.
因此,您的代码片段应该如下所示:
add_action ( \'wpmu_activate_user\', \'assign_user_to_blog\', 10, 3 );
function assign_user_to_blog( $user_id, $password, $meta )
{
$role = isset( $meta[\'role\'] ) ? $meta[\'role\'] : \'dmd\';
add_user_to_blog( 3, $user_id, $role );
}
但是
$meta
变量在以前的代码段中未定义。
开发时应记住使用WP_DEBUG
监视PHP错误、警告和通知。例如,检查Debugging in WordPress 在法典中。