Сделайте поле для выставления счета платежной компанией только для чтения, оставив его активным в Woocommerce - PullRequest
0 голосов
/ 18 декабря 2018

Необходимо сделать вход только для чтения в оформлении заказа WooCommerce 3.0, но при этом исходный контент должен быть передан в заказ.В этом случае заказ необходимо передать FishBowl.

Я пробовал много подходов здесь.Это самое последнее ...

add_action('woocommerce_form_field_args', 'disable_company_input', 10, 3);


function disable_company_input($args, $key, $value)
{
    if ($key == 'billing_company') {
        $args['custom_attributes'] = [
            'disabled' => 'disabled',
        ];
    }
    return $args;
}

add_action('woocommerce_after_order_notes', 'billing_company_hidden_field');

function billing_company_hidden_field($checkout)
{

    echo '<input type="hidden" class="input-hidden" name="billing_company">';

}

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

Большое спасибо, если вы можете помочь.

1 Ответ

0 голосов
/ 19 декабря 2018

Вместо этого попробуйте следующее (поскольку текстовое поле должно быть readonly, но не disabled) :

add_filter( 'woocommerce_checkout_fields' , 'custom_checkout_fields' );
function custom_checkout_fields( $fields ) {
    $fields['billing']['billing_company']['custom_attributes']['readonly'] = 'readonly';

    return $fields;
}

Код помещается в файл function.php вашегоАктивная детская тема (или активная тема).Протестировано и работает.

Если некоторые данные существуют, они появятся в этом поле, но клиент не сможет добавлять или изменять ввод, поскольку он будет «только для чтения».


Добавление - Проверьте, не имеет ли Биллинговая компания никакого значения, и уберите / уберите поле:

add_filter( 'check_billing_company_checkout_field' , 'check_billing_company_checkout_field' );
function billing_company_checkout_field( $fields ) {
    $billing_company = WC()->customer->get_billing_company();

    if( empty( $billing_company ) ) { // Remove field
        unset($fields['billing']['billing_company']); 
    } else { // Make readonly
        $fields['billing']['billing_company']['custom_attributes']['readonly'] = 'readonly'; 
    }

    return $fields;
}

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

...