Как изменить поля в форме регистрации для новой версии WordPress?

Предположим, что подключение к серверу уже установлено и файл wp-login.php открыт для редактирования. Первым делом нужно найти строку <br/> <br/> <code class="php">$user_login = $_POST['user_login'];</code> <br/> <br/> и заменить её на <br/> <br/> <pre><code class="php">$user_login = $_POST['user_login'];
if(!empty($user_login)) wp_die('Нет доступа!');
$user_login = $_POST['wpschool_user_login'];</code></pre> <br/> <br/> Затем следует изменить следующие строки <br/> <br/> <pre><code class="html">&lt;label&gt;&lt;?php _e('Username') ?&gt;
&lt;input type="text" name="user_login" id="user_login" value="&lt;?php echo esc_attr(stripslashes($user_login)); ?&gt;" size="20" tabindex="10" /&gt;&lt;/label&gt;</code></pre> <br/> <br/> на <br/> <br/> <br/> <br/> <?php _e('Username') ?> <br/> <br/> <br/> <br/> <br/> <pre><code class="html">&lt;label&gt;&lt;?php _e('Username') ?&gt;
&lt;input type="text" name="wpschool_user_login" id="user_login" value="&lt;?php echo esc_attr(stripslashes($user_login)); ?&gt;" size="20" tabindex="10" /&gt;&lt;/label&gt;</code></pre> <br/> <br/> Я стремлюсь предотвратить регистрацию спам-аккаунтов, однако в версии WordPress 5.2 строки изменились. Могли бы Вы подсказать, каким образом внести необходимые изменения? Хотелось бы получить оптимальное решение, но предыдущие версии кода уже не работают. В настоящее время столкнулся с трудностями при замене кода из-за значительных изменений. Заранее благодарю за помощь.
  • 12 января 2025 г. 15:54
Ответы на вопрос 2
Изменение полей в форме регистрации WordPress — это задача, которая может быть выполнена более оптимально и безопасно с использованием хуков и фильтров, предоставляемых WordPress. Редактировать файлы ядра, такие как `wp-login.php`, не рекомендуется, так как это может привести к проблемам с обновлениями и совместимостью.

Чтобы изменить поля форм регистрации в WordPress, лучше всего использовать хуки. Ниже приведен пример того, как можно изменить поле "Имя пользователя" с помощью вашего собственного плагина или в файле `functions.php` вашей темы.

### Шаг 1: Создайте плагин или используйте `functions.php`

Если вы хотите создать плагин:

1. Создайте новую папку в `wp-content/plugins/`, например, `custom-registration-fields`.
2. Создайте файл `custom-registration-fields.php` внутри этой папки и добавьте следующий код:

```php
<?php
/**
 * Plugin Name: Custom Registration Fields
 * Description: Изменяет поля в форме регистрации пользователя.
 * Version: 1.0
 * Author: Ваше имя
 */

// Изменение поля "Имя пользователя" в форме регистрации
add_action('register_form', 'custom_register_form');

function custom_register_form() {
    ?>
    <label for="wpschool_user_login"><?php _e('Username') ?><br />
        <input type="text" name="wpschool_user_login" id="wpschool_user_login" value="<?php if (!empty($_POST['wpschool_user_login'])) echo esc_attr($_POST['wpschool_user_login']); ?>" size="20" tabindex="10" />
    </label>
    <?php
}

// Проверка нового поля перед регистрацией
add_action('register_post', 'custom_register_post', 10, 3);

function custom_register_post($username, $email, $errors) {
    if (empty($_POST['wpschool_user_login']) || !is_string($_POST['wpschool_user_login'])) {
        $errors->add('wpschool_user_login_error', __('<strong>ERROR</strong>: Вы должны ввести имя пользователя.'));
    } else {
        $username = sanitize_user($_POST['wpschool_user_login']);
    }
}

// Сохранение нового поля в базе данных
add_action('user_register', 'custom_user_register');

function custom_user_register($user_id) {
    if (!empty($_POST['wpschool_user_login'])) {
        update_user_meta($user_id, 'wpschool_user_login', sanitize_text_field($_POST['wpschool_user_login']));
    }
}
```

### Шаг 2: Активируйте плагин

Перейдите в панель управления WordPress, на вкладку "Плагины" и активируйте созданный вами плагин.

### Объяснение кода:

- `custom_register_form()` — добавляет новое поле "Имя пользователя" к форме регистрации.
- `custom_register_post()` — проверяет, было ли новое поле заполнено, и добавляет ошибку, если оно пустое.
- `custom_user_register()` — сохраняет значение нового поля в метаданных пользователя.

### Примечание

- Таким образом, вы избегаете изменения ядра WordPress и используете стандартные механизмы платформы.
- Этот код можно дополнительно адаптировать под ваши требования, такие как добавление проверки уникальности имени пользователя или дополнительных полей.

Помните, что всегда следует делать резервную копию перед внесением изменений, особенно если вы редактируете код.
Самый правильный путь - сделать свою форму регистрации и логина, а стандартные пути редиректить на них. Это и не сложно, и удобно манипулировать функционалом, и выглядит красиво на сайте (плюс боты ее могут не найти, если путь нестандартный)
Похожие вопросы