/ Плагины / Юр. или физ. лицо при оформлении

Юр. или физ. лицо при оформлении

HIT

09.03.2019

133493

34

Расширим функционал Woocommerce выбором при оформлении заказа: юр. или физ. лицо. Естественно данный выбор будет влиять на множество аспектов самого процесса заказа и прочих функций WC.

Создание переключателя и полей для организации

Начинаем с того, что создаем поле с переключателем юр. или физ. лица

// Добавление выбора физ. или юр. лицо
add_action( 'woocommerce_before_checkout_billing_form', 'organisation_checkout_field' );
function organisation_checkout_field( $checkout ) {
    echo '<div id="organisation_checkout_field">';
    woocommerce_form_field( 'organisation', array(
        'type'    => 'radio',
        'class'   => array('form-row-wide'),
        'label'   =>  '',
	    'options' => array(
			'private_person' => 'Частное лицо',
			'company' => 'Организация'
		)
        ), $checkout->get_value( 'organisation' ));
    echo '</div>';
}

Создаем поля, которые нужны при выборе юридического лица:

add_action( 'woocommerce_legal_face', 'my_custom_checkout_field_legal_face' );
function my_custom_checkout_field_legal_face( $checkout ) {
	$current_user = wp_get_current_user();
	$user_id = $current_user->ID;

    echo '<div class="woocommerce-organisation-fields__field-wrapper"><h3>Реквизиты организации</h3>';

    woocommerce_form_field( 'organisation_name', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'   => __('Наименование'),
    ), get_user_meta( $user_id, 'organisation_name', true ));
	
	woocommerce_form_field( 'organisation_address', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'   => __('Адрес организации'),
    ), get_user_meta( $user_id, 'organisation_address', true ));			
	
	woocommerce_form_field( 'organisation_inn', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-first'),
        'placeholder'   => __('ИНН'),
    ), get_user_meta( $user_id, 'organisation_inn', true ));
	
	woocommerce_form_field( 'organisation_kpp', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-last'),
        'placeholder'   => __('КПП'),
    ), get_user_meta( $user_id, 'organisation_kpp', true ));
	
	woocommerce_form_field( 'organisation_checking_account', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'   => __('Расчетный счет'),
    ), get_user_meta( $user_id, 'organisation_checking_account', true ));
	
	woocommerce_form_field( 'organisation_bank', array(
		'required'      => true,
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'placeholder'   => __('Банк'),
    ), get_user_meta( $user_id, 'organisation_bank', true ));

    echo '</div>';
}

‘required’ => true — обязательные для заполнения поля. В данной функции прописано автозаполнение полей если есть их значение.

Чтобы вставить поля Реквизиты нужно прописать экшн в шаблоне woocommerce/checkout/form-checkout.php после экшена woocommerce_checkout_billing (к нему самому привязаться не мог, т.к. тога поля выводятся ниже комментария)

<?php do_action( 'woocommerce_legal_face' ); ?>

Прописываем скрипты: один из пунктов выбора по умолчанию и скрытие группы полей Реквизиты, если выбран вариант физ. лицо

// Включить радио кнопку изначально
jQuery(function() {
    var $radios = jQuery('input:radio[name=organisation]');
    if($radios.is(':checked') === false) {
        $radios.filter('[value="private_person"]').prop('checked', true);
    }
});

// Скрытие реквизитов
jQuery(document).ready(function($){
	$('.woocommerce-organisation-fields__field-wrapper').hide();

	$("input[name=organisation]:radio").click(function () {
		if ($('input[name=organisation]:checked').val() == "private_person") {
			$('.woocommerce-organisation-fields__field-wrapper').hide();
		} else if ($('input[name=organisation]:checked').val() == "company") {
			$('.woocommerce-organisation-fields__field-wrapper').show();
		}
	});
});

Функция верификации (заполнены ли обязательные поля). Особенностью функции является вывод предупреждения только в случае если выбрано юр. лицо:

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
	$radioVal = $_POST["organisation"];

	if($radioVal == "company") {
		if ( ! $_POST['organisation_name'] ) wc_add_notice( __( '<strong>Наименование организации</strong> является обязательным полем.' ), 'error' );
		if ( ! $_POST['organisation_address'] ) wc_add_notice( __( '<strong>Адрес организации</strong> является обязательным полем.' ), 'error' );
		if ( ! $_POST['organisation_inn'] ) wc_add_notice( __( '<strong>ИНН</strong> является обязательным полем.' ), 'error' );
		if ( ! $_POST['organisation_kpp'] ) wc_add_notice( __( '<strong>КПП</strong> является обязательным полем.' ), 'error' );
		if ( ! $_POST['organisation_checking_account'] ) wc_add_notice( __( '<strong>Расчетный счет</strong> является обязательным полем.' ), 'error' );
		if ( ! $_POST['organisation_bank'] ) wc_add_notice( __( '<strong>Банк</strong> является обязательным полем.' ), 'error' );	
	}
}

Функция сохранения полей. Причем данные поля сохраняем не как order meta, а как user meta.

// Update user meta with field value
 
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta() {
	$current_user = wp_get_current_user();
	$user_id = $current_user->ID;

$radioVal = $_POST["organisation"];
if($radioVal == "company") { update_user_meta( $user_id, 'company', 'on' ); } else { delete_user_meta( $user_id, 'company' ); }

    if ( ! empty( $_POST['organisation_name'] ) ) { update_user_meta( $user_id, 'organisation_name', sanitize_text_field( $_POST['organisation_name'] ) ); }
    if ( ! empty( $_POST['organisation_address'] ) ) { update_user_meta( $user_id, 'organisation_address', sanitize_text_field( $_POST['organisation_address'] ) ); }
    if ( ! empty( $_POST['organisation_inn'] ) ) { update_user_meta( $user_id, 'organisation_inn', sanitize_text_field( $_POST['organisation_inn'] ) ); }
    if ( ! empty( $_POST['organisation_kpp'] ) ) { update_user_meta( $user_id, 'organisation_kpp', sanitize_text_field( $_POST['organisation_kpp'] ) ); }
    if ( ! empty( $_POST['organisation_checking_account'] ) ) { update_user_meta( $user_id, 'organisation_checking_account', sanitize_text_field( $_POST['organisation_checking_account'] ) ); }
    if ( ! empty( $_POST['organisation_bank'] ) ) { update_user_meta( $user_id, 'organisation_bank', sanitize_text_field( $_POST['organisation_bank'] ) ); }
}

Также эта функция сохраняет значение поля company (ON) если выбрано юр. лицо и удаляет мета поле company если выбрано физ. лицо. Далее поле company пригодится для проверки при выводе реквизитов.

Вывод полей в различных шаблонах

Выводим поля группы Реквизиты в бланке заказа:

// Вывести реквизиты в бланке заказа
 
add_action( 'woocommerce_order_details_after_customer_details', 'organisation_checkout_field_echo_in_order' );
function organisation_checkout_field_echo_in_order() {
	$current_user = wp_get_current_user();
	$user_id = $current_user->ID;
	$user_id_company = get_user_meta( $user_id, 'company', 'on' );
	if($user_id_company) {
		echo '<h2>Реквизиты компании</h2>';
		echo 'Наименование: '.get_user_meta( $user_id, 'organisation_name', true ).'<br>';
		echo 'Адрес: '.get_user_meta( $user_id, 'organisation_address', true ).'<br>';
		echo 'ИНН: '.get_user_meta( $user_id, 'organisation_inn', true ).'<br>';
		echo 'КПП: '.get_user_meta( $user_id, 'organisation_kpp', true ).'<br>';
		echo 'Расч. счет: '.get_user_meta( $user_id, 'organisation_checking_account', true ).'<br>';
		echo 'Банк: '.get_user_meta( $user_id, 'organisation_bank', true );	
	}
}

Если необходимо вывести в Личном кабинете во вкладке Адреса, то необходимо прописать вышеописанную функцию к новому хуку:

add_action( 'woocommerce_insert_organisation_details', 'organisation_checkout_field_echo_in_order' );

А в шаблоне woocommerce/myaccount/my-address.php прописать вывод этого хука (после foreach):

<?php do_action( 'woocommerce_insert_organisation_details' ); ?>

Изменять реквизиты так же как адреса плательщика и доставки

Вывести реквизиты в адмике (в заказе):

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'organisation_checkout_field_echo_in_admin_order', 10 );
function organisation_checkout_field_echo_in_admin_order() {
	$current_user = wp_get_current_user();
	$user_id = $current_user->ID;
	$user_id_company = get_user_meta( $user_id, 'company', 'on' );
	if($user_id_company) {
		echo '</div></div><div class="clear"></div>';
		echo '<div class="order_data_column_container"><div class="order_data_column_wide">';
		echo '<h3>Реквизиты компании</h3>';
		echo 'Наименование: '.get_user_meta( $user_id, 'organisation_name', true ).'<br>';
		echo 'Адрес: '.get_user_meta( $user_id, 'organisation_address', true ).'<br>';
		echo 'ИНН: '.get_user_meta( $user_id, 'organisation_inn', true ).'<br>';
		echo 'КПП: '.get_user_meta( $user_id, 'organisation_kpp', true ).'<br>';
		echo 'Расч. счет: '.get_user_meta( $user_id, 'organisation_checking_account', true ).'<br>';
		echo 'Банк: '.get_user_meta( $user_id, 'organisation_bank', true );
	}
}

Вывести реквизиты в бланке писем

add_action( 'woocommerce_email_customer_details', 'woocommerce_email_after_order_table_func', 50 );
function woocommerce_email_after_order_table_func() {
	$current_user = wp_get_current_user();
	$user_id = $current_user->ID;
	$user_id_company = get_user_meta( $user_id, 'company', 'on' );
	if($user_id_company) {
	?>

	<h3>Реквизиты компании</h3>
	<table>
		<tr>
			<td><strong>Наименование: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $user_id, 'organisation_name', true ) ); ?></td>
		</tr>
		<tr>
			<td><strong>Адрес: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $order_id, 'organisation_address', true ) ); ?></td>
		</tr>
		<tr>
			<td><strong>ИНН: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $user_id, 'organisation_inn', true ) ); ?></td>
		</tr>
		<tr>
			<td><strong>КПП: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $user_id, 'organisation_kpp', true ) ); ?></td>
		</tr>
		<tr>
			<td><strong>Расч. счет: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $order_id, 'organisation_checking_account', true ) ); ?></td>
		</tr>
		<tr>
			<td><strong>Банк: </strong></td>
			<td><?php echo wptexturize( get_user_meta( $user_id, 'organisation_bank', true ) ); ?></td>
		</tr>		
	</table>

	<?php
	}
}

woocommerce_email_after_order_table — будут выводиться перед адресами

woocommerce_email_customer_details — будут выводиться после адресов

Изменить набор методов платежей в зависимости от формы плательщика

Нашел отличное решение и немного его доработал под вышеописанный переключатель

add_filter( 'woocommerce_available_payment_gateways', 'kvk_field_cheque_payment_method', 20, 1);
function kvk_field_cheque_payment_method( $gateways ){
if( !is_admin() ) {
    foreach( $gateways as $gateway_id => $gateway ) {

        if( WC()->session->get( 'is_company' ) ){
            unset( $gateways['cod'] );
        } else {
			unset( $gateways['bacs'] );
		}
    }
    return $gateways;
}
}

// The WordPress Ajax PHP receiver
add_action( 'wp_ajax_kvk_nummer', 'get_ajax_kvk_nummer' );
add_action( 'wp_ajax_nopriv_kvk_nummer', 'get_ajax_kvk_nummer' );
function get_ajax_kvk_nummer() {
	
    if ( $_POST['organisation'] == 'company' ){
        WC()->session->set('is_company', '1');
    } else {
        WC()->session->set('is_company', '0');
    }
    die();
}

// The jQuery Ajax request
add_action( 'wp_footer', 'checkout_kvk_fields_script' );
function checkout_kvk_fields_script() {
    // Only checkout page
    if( is_checkout() && ! is_wc_endpoint_url() ):

    // Remove "is_company" custom WC session on load
    if( WC()->session->get('is_company') ){
        WC()->session->__unset('is_company');
    }
    ?>
    <script type="text/javascript">
        jQuery( function($){
            var a = 'input[name=organisation]';

            // Ajax function
            function checkKvkNummer( value ){
                 $.ajax({
                    type: 'POST',
                    url: wc_checkout_params.ajax_url,
                    data: {
                        'action': 'kvk_nummer',
						'organisation': $('input[name=organisation]:checked').val(),
                        //'organisation': value != '' ? 1 : 0, // чредование значений для валидации text или включения checkbox
                    },
                    success: function (result) {
                        $('body').trigger('update_checkout');
                    }
                });
            }

            // On start
            checkKvkNummer($(a).val());

            // On change event
            $(a).change( function () {
                checkKvkNummer($(this).val());
            });
        });
    </script>
    <?php
    endif;
};

В данном случае при выборе физ. лица пропадает вариант оплаты банковским переводом, а при выборе юр. лица недоступен вариант оплаты наличными.

ID стандартных и популярных методов оплаты:

  • bacs — прямой банковский перевод
  • cheque — чековые платежи
  • cod — оплата при доставке
  • paypal — PayPal
  • ym_api_bank_card — Банковские карты (через сервис Яндекс Касса)

Удалить стандартные поля банковского перевода

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

Убрать из шаблонов писем:

// Отключить стандартные поля банковского перевода в шаблоне письма

add_action( 'woocommerce_email_before_order_table', function(){
    if ( ! class_exists( 'WC_Payment_Gateways' ) ) return;

    $gateways = WC_Payment_Gateways::instance(); // gateway instance
    $available_gateways = $gateways->get_available_payment_gateways();

    if ( isset( $available_gateways['bacs'] ) )
        remove_action( 'woocommerce_email_before_order_table', array( $available_gateways['bacs'], 'email_instructions' ), 10, 3 );
}, 1 );

Убрать из деталей заказа:

// Отключить стандартные поля банковского перевода в шаблоне заказа

add_action( 'init', 'remove_bacs_from_thank_you_page', 100 );
function remove_bacs_from_thank_you_page() {
	if ( ! function_exists( 'WC' ) ) { return; } // Bail, if we don't have WC function
	$available_gateways = WC()->payment_gateways()->get_available_payment_gateways();
	$gateway = isset( $available_gateways['bacs'] ) ? $available_gateways['bacs'] : false;
	if ( false == $gateway ) { return; } // We won't do anything if the gateway is not available
	
	remove_action( 'woocommerce_thankyou_bacs', array( $gateway, 'thankyou_page' ) );
}

Тэги: ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Отложенная загрузка изображений

Отложенная загрузка изображений

Если на странице есть несколько изображений или есть изображения дублирующиеся на всех страницах (header, footer), то чтобы ускорить общую загрузку сайта, можно установить для изображений отложенную загрузку. Изображение будет появляться Читать далее »

Metabox woocommerce

Metabox woocommerce

У плагина woocommerce есть набор дополнительных полей при редактировании товара. При необходимости можно в группы полей WC добавить свои произвольные metabox. Должно получится так: Создание и отображение metabox Первый экшн Читать далее »

/
Вариативный товар

Вариативный товар

Вариативный товар — один из типов товаров плагина интернет-магазина Woocommerce. Суть вариативного товара в том, что мы создаем несколько вариантов исполнения одного товара (размер, цвет, емкость и т.д.), и в Читать далее »

Добавить комментарий

34 комментария

  1. Аватар
    Павел

    Благодарю за материал, аналогов в сети не нашел!
    Единственное — введенные данные не отображаются в админке в разделе «Пользователи». Почему?

    1. Alexandr
      Alexandr

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

  2. Аватар
    Инна

    Здравствуйте,  заранее прошу прощения, если мой вопрос покажется Вам глупым, я только вчера (буквально) начала знакомитьтся с php. Не могли бы Вы мне подсказать, что я делаю не так: после активации этого плагина появляется сообщение «Плагин создал 820 символов неожиданного вывода при активации. Если возникнет ошибка “headers already sent” с RSS-лентами или иные проблемы, то попробуйте деактивировать или удалить этот плагин.» (((
    мне кажется, что я неправильно вставляю скрипт:
    ?>
    <script type=»text/javscript»>
    // Включить радио кнопку изначально
    jQuery(function() {
        var $radios = jQuery(‘input:radio[name=organisation]’);
        if($radios.is(‘:checked’) === false) {
            $radios.filter(‘[value=»private_person»]’).prop(‘checked’, true);
        }
    });
     
    // Скрытие реквизитов
    jQuery(document).ready(function($){
    $(‘.woocommerce-organisation-fields__field-wrapper’).hide();
     
    $(«input[name=organisation]:radio»).click(function () {
    if ($(‘input[name=organisation]:checked’).val() == «private_person») {
    $(‘.woocommerce-organisation-fields__field-wrapper’).hide();
    } else if ($(‘input[name=organisation]:checked’).val() == «company») {
    $(‘.woocommerce-organisation-fields__field-wrapper’).show();
    }
    });
    });
    </script>
     

  3. Аватар
    Инна

    Вопрос снят)))

    1. Alexandr
      Alexandr

      Я рад. Не всегда получается отвечать оперативно. А в чем была проблема вкратце? Может кому то еще будет полезно.

  4. Аватар
    Иван

    Добрый день! Спасибо за такую полезную статью! 
    Вопрос: Вывел в Личном кабинете во вкладке Адреса реквизиты. А как изменять реквизиты так же как адреса плательщика и доставки?
    Спасибо!

    1. Alexandr
      Alexandr

      Хороший вопрос. Еще не доработал этот аспект данного функционала. Не уверен что в ближайшее время дойдут до этого руки, но как только сделаю это — результат опубликую.

  5. Аватар
    Иван

     У Вас ошибка в функции:
    Вывести реквизиты в адмике (в заказе):
    Эта функция показывает реквизиты текущего пользователя т.е администратора, а не клиента. Т.е данные будут одинаковые на всех заказах.

  6. Аватар
    Иван

    Исправленный вариант:
    Вывести реквизиты в адмике (в заказе):
    add_action( ‘woocommerce_admin_order_data_after_shipping_address’, ‘organisation_checkout_field_echo_in_admin_order’, 10 );
    function organisation_checkout_field_echo_in_admin_order($order) {
    $user_id = $order->get_user_id();
    $user_id_company = get_user_meta( $user_id, ‘company’, ‘on’ );
    if($user_id_company) {
    echo ‘</div></div><div class=»clear»></div>’;
    echo ‘<div class=»order_data_column_container»><div class=»order_data_column_wide»>’;
    echo ‘<h3>Реквизиты компании</h3>’;
    echo ‘Наименование: ‘.get_user_meta( $user_id, ‘organisation_name’, true ).'<br>’;
    echo ‘Адрес: ‘.get_user_meta( $user_id, ‘organisation_address’, true ).'<br>’;
    echo ‘ИНН: ‘.get_user_meta( $user_id, ‘organisation_inn’, true ).'<br>’;
    echo ‘КПП: ‘.get_user_meta( $user_id, ‘organisation_kpp’, true ).'<br>’;
    echo ‘Расч. счет: ‘.get_user_meta( $user_id, ‘organisation_checking_account’, true ).'<br>’;
    echo ‘Банк: ‘.get_user_meta( $user_id, ‘organisation_bank’, true );
    }
    }

    1. Alexandr
      Alexandr

      Спасибо за исправление! Вы правы, лучше брать ID юзера из заказа, а не текущего.

  7. Аватар
    Иван

    // Добавляем поля в кабинет пользователя в форму «детали учетной записи»

    add_action( ‘woocommerce_edit_account_form’, ‘add_favorite_color_to_edit_account_form’ );
    function add_favorite_color_to_edit_account_form() {
    $current_user = wp_get_current_user();
    $user_id = $current_user->ID;
    $user_id_company = get_user_meta( $user_id, ‘company’, ‘on’ );
    if($user_id_company) {
    ?>

    <input type="text" class="woocommerce-Input woocommerce-Input—text input-text" name="organisation_name" id="organisation_name" value="» />

    // …. перечисляем поля по такому же принципу

    <?php
    }
    }

    //сохраняем наши поля в кабинете пользователя
    add_action( 'woocommerce_save_account_details', 'save_extra_user_form' );

    function save_extra_user_form( $customer_id ){

    if ( isset( $_POST['organisation_name'] ) ) { update_user_meta( $customer_id, 'organisation_name', $_POST['organisation_name'] ); }
    //…. перечисляем все остальные поля по тому же принципу

    }

  8. Аватар
    Иван

    <fieldset>
    <legend><?php esc_html_e( ‘Реквизиты компании’, ‘woocommerce’ ); ?></legend>
        <p class=»woocommerce-form-row woocommerce-form-row—wide form-row form-row-wide»>
            <label for=»organisation_name»><?php _e( ‘Название компании’, ‘woocommerce’ ); ?>
            <input type=»text» class=»woocommerce-Input woocommerce-Input—text input-text» name=»organisation_name» id=»organisation_name» value=»<?php echo wptexturize( get_user_meta( $user_id, ‘organisation_name’, true ) );  ?>» />
        </p>

  9. Аватар
    Алексей

    Здравствуйте,  заранее прошу прощения, если мой вопрос покажется Вам глупым, я только вчера (буквально) начала знакомитьтся с php. Не могли бы Вы мне подсказать, что я делаю не так: после активации этого плагина появляется сообщение «Плагин создал 820 символов неожиданного вывода при активации. Если возникнет ошибка “headers already sent” с RSS-лентами или иные проблемы, то попробуйте деактивировать или удалить этот плагин.» (((мне кажется, что я неправильно вставляю скрипт:

    ?><script type=»text/javscript»>
    // Включить радио кнопку изначальноjQuery(function() {    var $radios = jQuery(‘input:radio[name=organisation]’);    if($radios.is(‘:checked’) === false) {        $radios.filter(‘[value=»private_person»]’).prop(‘checked’, true);    }}); // Скрытие реквизитовjQuery(document).ready(function($){$(‘.woocommerce-organisation-fields__field-wrapper’).hide(); $(«input[name=organisation]:radio»).click(function () {if ($(‘input[name=organisation]:checked’).val() == «private_person») {$(‘.woocommerce-organisation-fields__field-wrapper’).hide();} else if ($(‘input[name=organisation]:checked’).val() == «company») {$(‘.woocommerce-organisation-fields__field-wrapper’).show();}});});</script>
     

    Что он сделал????

    1. Alexandr
      Alexandr

      Скрипты нужно вставлять в файл со скриптами. У Вас в начале кода лишние символы php: ?>.

  10. Аватар
    Владислав

    Спасибо! статья отличная! Но, наверно, нужна доработка в том виде, что при выборе юр лица, поля для физ. лица не должны быть обязательными к заполнению. 

    1. Alexandr
      Alexandr

      Я оставил стандартные поля пользователя как контактного лица. Реквизиты компании это одно но оператор же будет связываться с конкретным человеком.

  11. Аватар
    Владислав

    Долго не мог понять, почему в письме не показываются поля адреса и расч счета. Дело в том, что в get_user_meta указан $order_id, а не user_id

    1. Alexandr
      Alexandr

      Спасибо за важное уточнение.

  12. Аватар
    Алеша

    А как связать выбор юр или физ с доставкой и оплатой?, что бы при выборе нужного типа плательщика автоматом выбирались необходимые способы доставки и оплаты…

    1. Alexandr
      Alexandr

      Как раз изменение набора методов оплаты в данном решении описано. До изменения набора вариантов доставки еще не добрался.

  13. Аватар
    Егор

    Здравствуйте. Спасибо за плагин! Единственное, при изменении набора методов платежей, в зависимости от формы плательщика создается дублирующий запрос.
    Query Monitor пишет — Ошибки PHP были вызваны во время запроса Ajax.
    Источники вызова:
    WC_Data_Store_WP->read_meta — 2 вызова
    Потенциальные проблемные места:
    WooCommerce->initialize_cart — 1 вызов
    WC_Checkout->get_value — 1 вызов
    Это вроде не влияет на работу плагина, но как можно исправить? Если вообще это нужно?  Спасибо.

    1. Alexandr
      Alexandr

      Постараюсь разобраться и ответить, но боюсь в ближайшее время у меня это не получится.

  14. Аватар
    hippy

    Приветствую, 
    1) Спасибо за плагин и вообще за этот сайт с полезными разработками, от души — спасибо!
    2) В «изменении набора методов платежей….», как добавить к Юр тоже оплату наличными, то есть при выборе ФИЗ — только наличными, ЮР — наличными и банковский перевод
    P.S. Я просто новичок и только начинаю познавать этот мир))), подскажите пожалуйста. 

    1. Alexandr
      Alexandr

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

  15. Аватар
    hippy

    Тут еще вот какая проблема образовалась…. не отображает нигде реквизиты, точнее, пару раз показало и то, до момента чистки кэша, вторую ночь пытаюсь разобраться. Ни в админке, ни в бланке заказа (((, тема дочерняя

  16. Аватар
    hippy

    Я допер, те изменения что внес Иван не меняют проблемы, «Вывести реквизиты в адмике (в заказе):
    Эта функция показывает реквизиты текущего пользователя т.е администратора, а не клиента. Т.е данные будут одинаковые на всех заказах.»
     Все-равно такая же проблема…. 

    1. Alexandr
      Alexandr

      Доработаю со временем.

  17. Аватар
    hippy

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

    1. Alexandr
      Alexandr

      Ну логика же правильная — отображать реквизиты только у зарегистрированных пользователей. И если пользователь не зарегистрирован, как он вообще может попасть в админку?

  18. Аватар
    hippy

    Тааакс…. возможно я чего недопонимаю, но разве не из под админки — заказы необходимо управлять этими заказами?, мне необходимо видеть реквизиты покупателей, работаю в основном с юриками…. 

    1. Alexandr
      Alexandr

      Все правильно, заказами нужно управлять через админку. Если сейчас реквизиты клиентов выводятся неправильно — нужно исправлять функции. Сейчас заниматься этим времени нет, но как будет время — доработаю.

  19. Аватар
    Алеша

    Как просматривать реквизиты от незарегистрированных пользователей ?

    1. Alexandr
      Alexandr

      Если пользователь не зарегистрирован и не сделал ни одного заказа (автоматическая регистрация при заказе), то каким образом его реквизиты сохраняться (чтобы их просматривать)?

  20. Аватар
    Александр

    Здравствуйте. А не подскажите, как можно переработать, чтобы работало при заказе без регистрации? Как вы писали выше, «автоматическая регистрация при заказе», не планируется, регистрация не планируется вообще, а ваш метод решения вопроса очень понравился, только бы сделать его для гостей (стандартные данные типа «имя» «фамилия» «адрес» передаются и в заказе есть, можно также передать и эти дополнительные данные, но без регистрации?)

Юр. или физ. лицо при оформлении
Адаптация woocommerce под свой шаблон
Рекомендации для васАдаптация woocommerce под свой шаблонOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.