Скрыть платеж наложенным платежом в зависимости от выбранных опций выбора полей в кассе WooCommerce - PullRequest
0 голосов
/ 15 апреля 2019

Я использую WooCommerce, и у меня есть настраиваемое поле оформления заказа в форме списка выбора.Я пытаюсь удалить шлюз наложенным платежом, когда клиент выбирает в пользовательском поле для проверки конкретную опцию (в данном случае «newyork»).

Ниже приведен мой фактический код, в котором я не знаю, как сделатьIF рабочая часть условия оператора:


add_filter('woocommerce_available_payment_gateways', 'woocs_filter_gateways', 1);

function woocs_filter_gateways($gateway_list)
{
    if ( order_meta key="wc_billing_field_7378" value = newyork )
    {
        unset($gateway_list['cod']);
    }

    return $gateway_list;
}

Как я могу получить выбранное значение моего пользовательского поля проверки В моем коде, чтобы мой оператор IF работал?


Редактировать:

Идентификатор настраиваемого поля оформления заказа wc_billing_field_7789, сгенерированный плагином ...

1 Ответ

1 голос
/ 15 апреля 2019

Обновлено - Обработка нескольких недопустимых назначений…

Во-первых, для тестирования I здесь есть подключенная функция, которая отображает поле выбора пользовательской проверки с несколькими опциями:

// Just for testing
add_action( 'woocommerce_after_checkout_billing_form', 'custom_select_field_after_checkout_billing_form', 10, 1 );
function custom_select_field_after_checkout_billing_form ( $checkout ) {

    woocommerce_form_field( 'wc_billing_field_7378', array(
        'type'    => 'select',
        'label'   => __( "Destinations (custom select field)"),
        'class'   => array( 'form-row-wide' ),
        'options' => array(
            '' => __("Choose a destination"),
            'naeem'             => __("Naeem"),
            'saad-al-abdullah'  => __("Saad Al Abdullah"),
            'other-one'         => __("Other one"),
            'last-one'          => __("Last one"),
        ),
        'required'          => true,
    ), $checkout->get_value( 'wc_billing_field_7378' ) );
}

См. Под дисплеем:

enter image description here


Теперь, чтобы получить этот рабочий JQuery и Ajax, требуется, чтобыиметь возможность включить или отключить платеж «Треска» в зависимости от значения выбранного параметра в этом поле выбора пользовательской проверки.

С этим кодом, если выбраны «Наим» или «Другой», он будет скрыт »Оплата наложенным платежом »(треска) способ оплаты ... Если выбран другой вариант,« Оплата наложенным платежом »снова будет видна.

Вот этот код:

// Jquery script that send the Ajax request
add_action( 'wp_footer', 'custom_checkout_js_script' );
function custom_checkout_js_script() {
    // Only on checkout
    if( is_checkout() && ! is_wc_endpoint_url() ) :
    ?>
    <script type="text/javascript">
    jQuery(function($){
        if (typeof wc_checkout_params === 'undefined') 
            return false;

        var field = 'select[name="wc_billing_field_7378"]';

        $( 'form.checkout' ).on('change blur', field, function() {
            $.ajax({
                type: 'POST',
                url: wc_checkout_params.ajax_url,
                data: {
                    'action': 'checkout_chosen_destination',
                    'chosen_destination': $(this).val(),
                },
                success: function (result) {
                    $(document.body).trigger('update_checkout');
                    console.log(result); // For testing only
                },
            });
        });
    });
    </script>
    <?php
    endif;
}

// The Wordpress Ajax PHP receiver
add_action( 'wp_ajax_checkout_chosen_destination', 'get_ajax_checkout_chosen_destination' );
add_action( 'wp_ajax_nopriv_checkout_chosen_destination', 'get_ajax_checkout_chosen_destination' );
function get_ajax_checkout_chosen_destination() {
    // Checking that the posted email is valid
    if ( isset($_POST['chosen_destination']) ) {

        // Set the value in a custom Woocommerce session identifier
        WC()->session->set('chosen_destination', esc_attr($_POST['chosen_destination']) );

        // Return the session value to jQuery
        echo json_encode(WC()->session->get('chosen_destination')); // For testing only
    }
    die(); // always use die at the end
}

// Show/Hide payment gateways
add_filter('woocommerce_available_payment_gateways', 'show_hide_cod_payment_method', 10, 1 );
function show_hide_cod_payment_method( $available_gateways ) {
    // HERE below set the not allowed destinations in the array
    $not_allowed_destinations = array('naeem', 'other-one');

    if ( in_array( WC()->session->get('chosen_destination'), $not_allowed_destinations ) ) {
        unset($available_gateways['cod']);
    }
    return $available_gateways;
}

Код идетв файле function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...