Создание формы регистрации пользователя в WordPress

16 июл. 2014 г., 17:43:41
Просмотры: 14.6K
Голосов: 0

У меня есть страница с формой под названием Test Form с такой формой:

<div id="container">
<form action="wp-content/themes/max-magazine/TestForm.php" method="post" name="myForm">
Пользователь <input type="text"  name="uname" />
Email  <input id="email" type="text" name="uemail" />
Пароль  <input type="password"  name="upass" />
<input type="submit" value="Отправить" /></form>
</div>

И в бэкенде у меня есть php-файл с именем TestForm.php

<?php 
function create_account(){
$user = 'AccountID';
$pass = 'AccountPassword';
$email = 'email@domain.com';
if ( !username_exists( $user )  && !email_exists( $email ) ) {
    $user_id = wp_create_user( $user, $pass, $email );
    $user = new WP_User( $user_id );
    $user->set_role( 'contributor' );
} 
}
add_action('init','create_account');
?>

Если эта функция определена в function.php, то она работает нормально и создает пользователя, но та же функция в TestForm.php не работает. Помогите, пожалуйста.

Также я буду получать данные из формы следующим образом:

<?php
$user = $_POST['uname'];
$pass = $_POST['upass'];
$email = $_POST['uemail'];
?>
0
Все ответы на вопрос 1
11

Вы отправляете данные из формы напрямую в файл TestForm.php, который является независимым PHP-скриптом, не связанным с логикой WordPress. Вы можете оставить атрибут action формы пустым — в этом случае данные формы будут отправлены на ту же страницу, которая содержит форму (и является частью WordPress):

<div id="container">
    <form method="post" name="myForm">
        Пользователь <input type="text"  name="uname" />
        Email  <input id="email" type="text" name="uemail" />
        Пароль  <input type="password"  name="upass" />
        <input type="submit" value="Отправить" />
    </form>
</div>

В этом случае данные формы отправляются на страницу WordPress, и срабатывает хук add_action('init','create_account');, если вы добавите его в файл functions.php, например, так:

add_action('init','create_account');
function create_account(){
    //Здесь может потребоваться валидация данных
    $user = ( isset($_POST['uname']) ? $_POST['uname'] : '' );
    $pass = ( isset($_POST['upass']) ? $_POST['upass'] : '' );
    $email = ( isset($_POST['uemail']) ? $_POST['uemail'] : '' );

    if ( !username_exists( $user )  && !email_exists( $email ) ) {
       $user_id = wp_create_user( $user, $pass, $email );
       if( !is_wp_error($user_id) ) {
           //пользователь создан
           $user = new WP_User( $user_id );
           $user->set_role( 'contributor' );
           //Перенаправление
           wp_redirect( 'URL_куда_перенаправить' );
           exit;
       } else {
           //$user_id содержит объект WP_Error. Обработайте ошибку
       }
    }
}

Примечание: Рекомендую использовать современную HTML5-разметку форм и типы полей ввода.

16 июл. 2014 г. 18:45:54
Комментарии

Значит, я не могу создать страницу TestForm.php?

Gaurav Gaurav
16 июл. 2014 г. 18:57:49

Тогда вопрос в том, как получить значения user, email и password в functions.php из формы myForm?

Gaurav Gaurav
16 июл. 2014 г. 18:58:40

У вас есть доступ к $_POST внутри функции create_account(), поэтому вы можете получить значения так же, как и в любой другой форме в PHP. И вы можете создать TestForm.php, но вам придется загружать движок WordPress в этом файле, что, я думаю, вам точно не нужно.

cybmeta cybmeta
16 июл. 2014 г. 19:07:33

И где я должен определить эту функцию? В файле functions.php? Или в TestForm.php?

Gaurav Gaurav
16 июл. 2014 г. 19:09:09

В functions.php

cybmeta cybmeta
16 июл. 2014 г. 19:10:11

То есть ты имеешь в виду, что мне нужно сделать это в functions.php? Но тогда как форма будет знать, на какой PHP-файл нужно отвечать? И что если мне нужно перенаправить на другую страницу после успешной регистрации?

Gaurav Gaurav
16 июл. 2014 г. 19:11:11

Как тогда перенаправить на другую страницу при успешном выполнении?

Gaurav Gaurav
16 июл. 2014 г. 19:11:43

Используйте wp_redirect. Думаю, вы путаете URL с расположением PHP-скрипта.

cybmeta cybmeta
16 июл. 2014 г. 19:13:14

Пожалуйста, подскажите, куда вставить этот wp_redirect?

Gaurav Gaurav
16 июл. 2014 г. 19:24:40

Поместите wp_redirect туда, где вы хотите, чтобы он выполнялся, очевидно. Например, если вы хотите, чтобы он выполнялся после успешного создания пользователя через wp_create_user, разместите его после проверки, что wp_create_user действительно создал пользователя. См. отредактированный ответ. Я думаю, ваш вопрос о "Создании формы регистрации пользователя в WordPress" уже решен, более конкретные вопросы следует задавать в новых вопросах, например, как использовать wp_redirect? Иначе мы можем затянуть обсуждение здесь до бесконечности.

cybmeta cybmeta
16 июл. 2014 г. 19:31:52

Я бы рекомендовал добавить проверки isset() для данных $_POST. В противном случае вы можете увидеть предупреждения PHP.

helgatheviking helgatheviking
16 июл. 2014 г. 19:56:15
Показать остальные 6 комментариев