добавить поле к форме регистрации 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