调整多站点注册过程并非易事。与其他流程不同,它确实有很多需要配合的地方,但是对于大量的自定义而言,它们似乎并没有很好地融合在一起,所以我理解您的无奈。
如果我理解正确的话,实现您想要的目标并不复杂,尽管在不重写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']);
}
记住:
- 如果要通过插件过滤输入,我强烈建议您使用选择输入来锁定提供的选项。
- 由于某些字段是必填字段,并且需要在注册过程中通过验证(最小字符,网站名称不允许使用的字符,黑名单名称等),因此建议在第一个字段中填充输入值时在$ _REQUEST全局上检查您的额外字段功能,以便用户在输回以修复WordPress默认字段值的情况下不会丢失输入;
- 您显然可以用最适合您的插件的方式替换最后一个功能的想法,但是现在可以从最后一个功能中获取该字段的值,这将对您有所帮助。
最后一点,如果您以后要处理所有现有博客的所有“ extra_field”值,我强烈建议将信息存储在单个表中。可能会使用update_site_option
而不是update_blog_option
最后一个函数,从而丢失blog_id,在这种情况下这不是必需的。
无论如何,让我们知道进展如何,祝您好运!