多站点注册过程不是一件容易调整的事情。与其他流程不同,它确实有许多挂钩可供使用,但它们似乎结合得不太好,无法进行大量定制,因此我理解您的沮丧。
如果我理解正确的话,实现你想要的并不复杂,尽管如果不覆盖WordPress的许多默认行为,这不可能是一个一步解决方案,主要是因为注册(即用户提交自定义信息的时间)和激活(即新博客实际创建的时间)是分开进行的。
这里是一个非常粗略的代码,你需要开始。希望它能引导您朝着正确的方向前进:
// Add text field on blog signup form
add_action(\'signup_blogform\', \'add_extra_field_on_blog_signup\');
function add_extra_field_on_blog_signup() { ?>
<label>An extra field</label>
<input type="text" name="extra_field" value="" />
<?php
}
// Append the submitted value of our custom input into the meta array that is stored while the user doesn\'t activate
add_filter(\'add_signup_meta\', \'append_extra_field_as_meta\');
function append_extra_field_as_meta($meta) {
if(isset($_REQUEST[\'extra_field\'])) {
$meta[\'extra_field\'] = $_REQUEST[\'extra_field\'];
}
return $meta;
}
// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action(\'wpmu_new_blog\', \'process_extra_field_on_blog_signup\', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
update_blog_option($blog_id, \'extra_field\', $meta[\'extra_field\']);
}
请记住:
如果您想通过插件过滤输入,我强烈建议使用选择输入锁定提供的选项由于某些字段是必需的,并且在注册过程中通过了验证(最少字符、sitename不允许的字符、黑名单名称等),因此我建议在填充第一个函数的输入值时,在$\\u请求全局上检查您的额外字段,这样用户就不会丢失输入,以防他被发回修复WordPress默认字段的值很明显,您可以用最适合插件的任何东西来替换最后一个函数的想法,但是现在可以从最后一个函数中获得字段的值,这应该会对您有所帮助最后一点,如果您想稍后处理所有现有博客中的所有“extra\\u field”值,我强烈建议将信息存储在一个表中;可能使用update_site_option
而不是update_blog_option
在最后一个函数上,丢失blog\\u id,在这种情况下不需要该id。
无论如何,让我们知道进展如何,祝你好运!