Intereting Posts
Использование фильтров и действий для API-интерфейса плагина? Откат от текущей версии WordPress до предыдущей Лучше ли использовать «Формат имени» или «этот-имя-формат» для настраиваемых полей? Установка темы / плагина через URL-адрес при нажатии кнопки Вход в WordPress с использованием данных внешней базы данных Плагин, чтобы забронировать курс и оплатить онлайн Woocommerce: как удалить заголовок страницы на домашней странице или странице магазина, но не на страницах категорий Можно ли использовать сценарий сценария WP / стиль для конкатенации и gzip скриптов и стилей в интерфейсе? Сценарий для удаления всех неактивных виджетов? htaccess отключить WordPress переписать правила для папки и ее содержимого как отображать веб-контент, содержащий html-код prolerly? Как вызвать настраиваемый тип сообщения с WP_query Получить информацию о сообщении внутри модального окна? Обновленные по дате пересылки сообщений, которые больше не существуют Как удалить сгенерированный HTML-код вокруг изображений в сообщениях?

Регистр переднего регистра с настраиваемыми полями

Im в настоящее время работает над форматом front end, используя код, найденный здесь – оригинал

add_action('template_redirect', 'register_a_user'); function register_a_user(){ if(isset($_GET['do']) && $_GET['do'] == 'register'): $errors = array(); if(empty($_POST['user']) || empty($_POST['email'])) $errors[] = 'provide a user and email'; if(empty($_POST['first_name']) || empty($_POST['last_name'])) $errors[] = 'provide name'; if(!empty($_POST['spam'])) $errors[] = 'gtfo spammer'; if(!empty($_POST['pass1']) && !empty($_POST['pass2'])) $error[] = 'The passwords you entered do not match'; $account = esc_attr($_POST['account_type']); $user_login = esc_attr($_POST['user']); $user_email = esc_attr($_POST['email']); $user_pass = esc_attr($_POST['pass1']); $user_pass2 = esc_attr($_POST['pass2']); $user_first = esc_attr($_POST['first_name']); $user_last = esc_attr($_POST['last_name']); $b_email = esc_attr($_POST['broker_email']); wp_update_user( array( 'ID' => $current_user->ID, 'broker_email' => esc_url( $_POST['broker_email'] ) ) ); require_once(ABSPATH.WPINC.'/registration.php'); $sanitized_user_login = sanitize_user($user_login); $user_email = apply_filters('user_registration_email', $user_email); if(!is_email($user_email)) $errors[] = 'invalid e-mail'; elseif(email_exists($user_email)) $errors[] = 'this email is already registered'; if(empty($sanitized_user_login) || !validate_username($user_login)) $errors[] = 'invalid user name'; elseif(username_exists($sanitized_user_login)) $errors[] = 'user name already exists'; if(empty($errors)): if ( $_POST['pass1'] == $_POST['pass2'] ) { $user_data = array ( 'user_login' => $sanitized_user_login, 'user_pass' => $user_pass, 'user_email' => $user_email, 'user_first' => $user_first, 'user_last' => $user_last, 'b_email' => $b_email, 'role' => $account ); // Create the user $user_id = wp_insert_user( $user_data ); } else { $errors[] = 'passwords dont match'; } if(!$user_id): $errors[] = 'registration failed...'; else: wp_new_user_notification($user_id); endif; endif; if(!empty($errors)) define('REGISTRATION_ERROR', serialize($errors)); else define('REGISTERED_A_USER', $user_email); endif; } 

В моей регистрационной форме я попытался добавить эти 3 поля

 <input type="text" name="broker_email" class="form-control" value="" /> <input type="text" name="first_name" class="form-control" value="" /> <input type="text" name="last_name" class="form-control" value="" /> 

Все почти отлично работает, за исключением сохранения имени полей arent и полей «broker email» arent save. Что я делаю не так?

С помощью чего-то, что сказал @TurtleTread, мне удалось заставить его работать. Мой код был прекрасен, но мне пришлось изменить две вещи. Я удалил пользовательское поле из моего $ user_data и добавил это после сразу после wp_insert_user

  add_user_meta($user_id, 'broker_email', $b_email); 

Вот мой последний код в моем файле functions.php –

 add_action('template_redirect', 'register_a_user'); function register_a_user(){ if(isset($_GET['do']) && $_GET['do'] == 'register'): $errors = array(); if(empty($_POST['user']) || empty($_POST['email'])) $errors[] = 'provide a user and email'; if(!empty($_POST['spam'])) $errors[] = 'gtfo spammer'; if(!empty($_POST['pass1']) && !empty($_POST['pass2'])) $error[] = 'The passwords you entered do not match'; $account = esc_attr($_POST['account_type']); $user_login = esc_attr($_POST['user']); $user_email = esc_attr($_POST['email']); $user_pass = esc_attr($_POST['pass1']); $user_pass2 = esc_attr($_POST['pass2']); $user_first = $_POST['first_name']; $user_last = $_POST['last_name']; $b_email = $_POST['broker_email']; require_once(ABSPATH.WPINC.'/registration.php'); $sanitized_user_login = sanitize_user($user_login); $user_email = apply_filters('user_registration_email', $user_email); if(!is_email($user_email)) $errors[] = 'invalid e-mail'; elseif(email_exists($user_email)) $errors[] = 'this email is already registered'; if(empty($sanitized_user_login) || !validate_username($user_login)) $errors[] = 'invalid user name'; elseif(username_exists($sanitized_user_login)) $errors[] = 'user name already exists'; if(empty($errors)): if ( $_POST['pass1'] == $_POST['pass2'] ) { $user_data = array ( 'user_login' => $sanitized_user_login, 'user_pass' => $user_pass, 'user_email' => $user_email, 'user_first' => $user_first, 'user_last' => $user_last, 'role' => $account ); // Create the user $user_id = wp_insert_user( $user_data ); add_user_meta($user_id, 'broker_email', $b_email); } else { $errors[] = 'passwords dont match'; } if(!$user_id): $errors[] = 'registration failed...'; else: wp_new_user_notification($user_id); endif; endif; if(!empty($errors)) define('REGISTRATION_ERROR', serialize($errors)); else define('REGISTERED_A_USER', $user_email); endif; } 

Кроме того, если вы хотите, чтобы они вошли в систему автоматически, вы можете добавить эту функцию сразу после –

 function auto_login_new_user( $user_id ) { wp_set_current_user($user_id); wp_set_auth_cookie($user_id); // You can change home_url() to the specific URL,such as wp_redirect( 'http://YOURURL.COM' ); } add_action( 'user_register', 'auto_login_new_user' ); 

Я вижу, что вы дизайнер, поэтому у вас не было большого опыта работы с кодированием и базой данных. Из проблем в коде у вас есть минимальное понимание функций PHP и WordPress. Не считайте это преступлением, поскольку я просто указываю, что вам, возможно, придется немного почитать о PHP и WordPress docs (боль, но необходимость, если вы хотите закодировать более рабочие скрипты PHP и WP).

Три основных вопроса, которые не позволяют сохранять поля:

  1. Ваша четвертая проверка проверки просто проверяет, не являются ли оба пароля не пустыми, что всегда будет возвращать true, если вы предоставили ввод для обоих полей. Ваша соответствующая проверка из более позднего кода верна, и вы должны ее использовать.

  2. wp_insert_user принимает только предопределенные ключи, указанные в связанном документе. Взгляните на это и измените свои ключи.

  3. Ваш b_email – это пользовательское поле usermeta (если у вас есть доступ к базе данных, вы можете взглянуть на wp_users, а в столбцах есть те, которые вы можете напрямую обновить, используя wp_insert_user или wp_update_user ). Поэтому для хранения пользовательских полей вам необходимо использовать add_user_meta или update_user_meta (Пожалуйста, внимательно прочитайте параметры этих функций, поскольку они позволяют добавлять несколько одинаковых ключей usermeta или только одну уникальную мета-кнопку в зависимости от того, как вы устанавливаете свои параметры).

Другие проблемы использования функций здесь, а также ошибочная логика кода:

  1. Вы использовали wp_update_user перед wp_insert_user. Является ли текущий пользователь попыткой создать нового пользователя и сохранить broker_email как мета-поле для себя тоже?
  2. Если это так, вам нужно также использовать функцию add_user_meta и использовать функцию get_current_user_id () вместо вызова $current_user как эта глобальная переменная напрямую не доступна в вашей функции. Вам нужно вызвать его в своей функции с помощью global $current_user если вы хотите получить к нему доступ, но лучше использовать функции WP.
  3. esc_attr и другие функции фильтра не должны использоваться для изменения некоторых пользовательских полей, которые должны оставаться точно такими же, как они были введены пользователем, или они просто получат измененное имя пользователя или пароль, который явно нежелателен в большинстве случаев. Вы можете запускать на них методы проверки и сообщать пользователю, что поля неприемлемы, но вы не должны просто изменять их и сохранять в db. Для текстового содержимого, такого как почтовый контент, который может быть точным, так как это зависит от вашей системы и т. Д., Но определенно не для учетных данных пользователя.

Используйте PHP-руководство и WordPress codex для поиска конкретного использования функций. Понимание того, как они работают, необходимо для хорошего развития WP.