добавить поле к форме регистрации woocommerce wordpress
Задача стоит такая: Предложить новому пользователю выбрать, физическое он лицо или юридическое и добавить поле к форме регистрации woocommerce wordpress. Если юридическое, то попросить у него название компании и все реквизиты. Потом к юридическому лицу применяются скидки на разные виды опта. Или не применяются. В WordPress есть hooks, то есть «крючки» или «зацепки». А проще это объяснить, если понять, что страница wordpress формируется сначала в буфере, поэтому возможны операции уже с готовой страницей, но еще не отданной по http. Вот туда и вставляются результаты работы функций, вызываемых с помощью hooks. add_action и add_filter — синонимы. Это как-то туманно, но надо запомнить и всё. Итак, добавляем поле выбора юридического статуса к форме регистрации.
add_action( 'woocommerce_register_form', 'abc_show_person_or_company' );
show_person_or_company — мне нравятся говорящие названия. woocommerce_register_form — hook, событие после отрисовки основных данных формы регистрации, типа. Ну и функция, которая будет вызываться.
function abc_show_person_or_company() echo "<p class=\"form-row form-row-wide\"><select class=\"input-text\" name=\"person_or_company\" id=\"person_or_company\">"; echo "<option value=\"_person\" "; if($_POST['person_or_company'] == '_person') echo "selected=\"selected\""; echo ">Физическое лицо</option>"; echo "<option value=\"_company\" "; if($_POST['person_or_company'] == '_company') echo "selected=\"selected\""; echo ">Юридическое лицо</option>"; echo "</select></p>";?> <script> jQuery( "#person_or_company" ).change(function() switch (jQuery( "select#person_or_company" ).val()) case '_person': jQuery( "p#_company_name_p" ).css( "display", "none"); break case '_company': jQuery( "p#_company_name_p" ).css( "display", "block"); break); </script> <?php echo "<p id=\"_company_name_p\" class=\"form-row form-row-wide\" style=\"display: none;\">" . "<label for=\"_company_name\">Название компании<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_company_name\" " . "id=\"_company_name\" value=\""; if ( ! empty( $_POST['_company_name'] ) ) echo esc_attr( $_POST['_company_name'] ); echo "\">"; echo "<label for=\"_inn\">ИНН<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_inn\" " . "id=\"_inn\" value=\""; if ( ! empty( $_POST['_inn'] ) ) echo esc_attr( $_POST['_inn'] ); echo "\">"; echo "<label for=\"_kpp\">КПП<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_kpp\" " . "id=\"_kpp\" value=\""; if ( ! empty( $_POST['_kpp'] ) ) echo esc_attr( $_POST['_kpp'] ); echo "\">"; echo "<label for=\"_rschet\">Р\счет<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_rschet\" " . "id=\"_rschet\" value=\""; if ( ! empty( $_POST['_rschet'] ) ) echo esc_attr( $_POST['_rschet'] ); echo "\">"; echo "<label for=\"_bik\">БИК<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_bik\" " . "id=\"_bik\" value=\""; if ( ! empty( $_POST['_bik'] ) ) echo esc_attr( $_POST['_bik'] ); echo "\">"; echo "<label for=\"_korschet\">К\счет<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_korschet\" " . "id=\"_korschet\" value=\""; if ( ! empty( $_POST['_korschet'] ) ) echo esc_attr( $_POST['_korschet'] ); echo "\">"; echo "<label for=\"_bank_name\">Название банка<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_bank_name\" " . "id=\"_bank_name\" value=\""; if ( ! empty( $_POST['_bank_name'] ) ) echo esc_attr( $_POST['_bank_name'] ); echo "\">"; echo "<label for=\"_jur_address\">Юридический адрес<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_jur_address\" " . "id=\"_jur_address\" value=\""; if ( ! empty( $_POST['_jur_address'] ) ) echo esc_attr( $_POST['_jur_address'] ); echo "\">"; echo "<label for=\"_telephon\">Телефон<span class=\"required\">*</span></label>" . "<input type=\"text\" class=\"input-text\" name=\"_telephon\" " . "id=\"_telephon\" value=\""; if ( ! empty( $_POST['_telephon'] ) ) echo esc_attr( $_POST['_telephon'] ); echo "\">"; echo "</p>";
У физических лиц нет названия компании, а у юридических — необходимое условие, как и все остальные реквизиты. Как ни странно, работает. Дальше расскажу(сам себе), как эти поля проверить и сохранить в базе.
Перед обработкой нужно проверить, ввел ли корпоративный пользователь свои реквизиты. Лично я считаю, что покупка и расчет должны осуществляться в один-два клика, но заказчик считает так, как он считает.
Поэтому добавляем туда же, то есть в functions выбранного шаблона, хук и проверку полей.
add_action('woocommerce_registration_errors', '_registration_errors_validation', 10,3);
И сама функция.
function _registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) global $woocommerce; extract($_POST); // extracting $_POST into separate variables //print_r($_company_name); if($person_or_company == '_company' ) return $reg_errors;
Дальше немного сложнее, поскольку заказчик решил изменить стандартный ход регистрации. Пост набрал 300 слов, поэтому пока достаточно.
Поставим плагин, поскольку с ним удобнее. И немного его поправим, чтобы сохранить все наши поля. Всем привет, если кто читал, в чем я сомневаюсь.
Как добавить поле к форме регистрации и профилю пользователя Wordpress woocommerce
Комментариев нет:
Отправить комментарий