Добавьте настраиваемое поле ниже страны выставления счета в Woocommerce Checkout - PullRequest
0 голосов
/ 28 декабря 2018

Я использую WordPress 5.0.2 с WooCommerce 3.5.3, и у меня есть пользовательское выпадающее поле выбора с optgroup на странице оформления заказа, поле работает, как и ожидалось, но оно появляется после примечания к заказу, и я хотел бы, чтобы оно появилось нижеbilling_country поле.

enter image description here

add_action('woocommerce_before_order_notes', 'custom_checkout_select_field_with_optgroup', 10, 1 );
function custom_checkout_select_field_with_optgroup( $checkout ) {
    $domain  = 'woocommerce';
    $title   = __("Region", $domain);
    $slug    = sanitize_title($title);
    $default = __("Select your region", $domain);
    $value   = $checkout->get_value($slug);

    // Region option data array with optgroup
    $options = array(
        __("North Region", $domain) => array(
            'region1' => __("Region 1", $domain),
            'region2' => __("Region 2", $domain),
        ),
        __("South Region", $domain) => array(
            'region3' => __("Region 3", $domain),
            'region4' => __("Region 4", $domain),
        )
    );

    // The field
    echo '<p class="form-row form-row-wide '.$slug.'-dropdown" id="'.$slug.'_field" data-priority="">
    <label for="'.$slug.'" class="">'.$title.'</label>
    <span class="woocommerce-input-wrapper">
    <select name="'.$slug.'" id="'.$slug.'" class="select " data-placeholder="" autocomplete="'.$slug.'">
    <option value="">'.$default.'</option>';

    // Loop through "optgroup"
    foreach( $options as $optgroup_label => $optgroup_options ) {
        echo '<optgroup label="'.$optgroup_label.'">';
        // Loop through "options" in the "optgroup"
        foreach( $optgroup_options as $key => $label ) {
            $selected = $value === $key ? ' selected="selected"': '';
            echo '<option value="'.$key.'"'.$selected.'>'.$label.'</option>';
        }
        echo '</optgroup>';
    }

    echo '</select></span></p>';
}

Код прибывает в эту предыдущую тему: WooCommerce Выбрать выпадающий список с Optgroup On Checkout

Я знаю, что это настраиваемое поле не подключено к woocommerce_checkout_fields, и если я это сделаю, оно не будет отображаться, потому что я предполагаю, что это настраиваемое поле выбора не извлекается из class-wc-countries.php.

1 Ответ

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

Этот поток Github добавляет к доступным типам полей формы WooCommerce поле select с группой параметров"select_og".Получите его на Github : lomars / Woocommerce выберите поле с группой параметров

Этот код необходим для ответа.

Теперь высможет включить настраиваемое поле выбора с группами опций в поля формы Woocommerce, такие как поля оплаты и доставки.

Вот этот код для поля региона выставления счетов и доставки:

// Custom function that returns the options data array for "Region" field
function wc_get_region_options_data( $domain ){
    return [
        '' => __("Choose an option…"),
        __("North Region", $domain) => [
            'region1'   => __("Region 1", $domain),
            'region2'   => __("Region 2", $domain),
        ],
        __("South Region", $domain) => [
            'region3'   => __("Region 3", $domain),
            'region4'   => __("Region 4", $domain),
            'region5'   => __("Region 5", $domain),
            'region6'   => __("Region 6", $domain),
        ],
        __("East Region", $domain)  => [
            'region7'   => __("Region 7", $domain),
            'region8'   => __("Region 8", $domain),
            'region9'   => __("Region 9", $domain),
        ],
    ];
}

// Custom function that returns the "Region" field data array
function wc_get_region_field( $fields, $group ){
    $domain   = 'woocommerce';
    $options  = wc_get_region_options_data( $domain );
    $priority = (int) $fields[$group.'_country']['priority'];

    $fields[$group.'_region'] = array(
        'label'    => __("Region", $domain),
        'type'     => 'select_og',
        'class'    => array( 'form-row-wide' ),
        'required' => true,
        'priority' => $priority + 5,
        'options'  => $options,
        'clear'    => true,
    );

    return $fields;
}

// Include region field in billing section after billing country
add_filter('woocommerce_billing_fields', 'region_select_billing_field_with_optgroup', 10, 1 );
function region_select_billing_field_with_optgroup( $billing_fields ) {
    $billing_fields = wc_get_region_field( $billing_fields, 'billing' );
    return $billing_fields;
}

// Include region field in shipping section after shipping country
add_filter('woocommerce_shipping_fields', 'region_select_shipping_field_with_optgroup', 10, 1 );
function region_select_shipping_field_with_optgroup( $shipping_fields ) {
    $shipping_fields = wc_get_region_field( $shipping_fields, 'shipping' );
    return $shipping_fields;
}

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

enter image description here

Похожие: WooCommerce Выбрать выпадающий список с Optgroup On Checkout

...