Процесс регистрации на нескольких сайтах не так-то просто настроить. Он имеет много хуков, с которыми можно играть, в отличие от других процессов, но, похоже, они не слишком хорошо сочетаются друг с другом, поэтому я понимаю ваше разочарование.
Если я правильно понимаю, это не так сложно, чтобы достичь того, что вы хотите, хотя это не может быть одношаговое решение без переопределения большей части поведения 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, что не требуется в этом случае.
В любом случае, дайте нам знать, как оно идет, и удачи!