Получить список городов от стоимости доставки в зависимости от города - PullRequest
0 голосов
/ 02 мая 2018

Итак, я следовал этому примеру на Как изменить поле города на Jeroen в раскрывающемся списке в моем разделе Billing / Shipping моего сайта.

/**
 * Change the checkout city field to a dropdown field.
 */
function city_to_dropdown( $fields ) {
    $city_args = wp_parse_args( array(
        'type' => 'select',
        'options' => array(
            'amsterdam' => 'Amsterdam',
            'rotterdam' => 'Rotterdam',
            'den-haag'  => 'Den Haag',
            'utrecht'   => 'Utrecht',
            'leiden'    => 'Leiden',
            'groningen' => 'Groningen',
        ),
    ), $fields['shipping']['shipping_city'] );
    $fields['shipping']['shipping_city'] = $city_args;
    $fields['billing']['billing_city'] = $city_args; // Also change for billing field
    return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'city_to_dropdown' );

Все работает как положено, но вот что я хочу сделать по-другому.

Я хочу иметь возможность запрашивать все списки городов из тарифов доставки на основе города и отображать их в раскрывающемся коде выше.

enter image description here

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

Что мне нужно сделать, чтобы иметь возможность удалить введенные вручную города и получить что-то похожее на следующее:

‘options’ => get_list_cities_from_shipping_rate(),


Вопрос:

Какие фильтры или хуки в woocommerce мне нужно вызывать, чтобы иметь возможность вернуть список городов в моей функции get_list_cities_from_shipping_rate()?


Я новичок в написании этих пользовательских кодов в WordPress. Буду признателен за любые подсказки о том, как это начать.

Заранее спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте это:

function get_list_cities_from_shipping_rate( $rate_id ) {
    $cities = '';

    $key = '_wafs_shipping_method_conditions';
    $conditions = get_post_meta( $rate_id, $key, true );

    foreach ( (array) $conditions as $group ) {
        foreach ( (array) $group as $cond ) {
            if ( ! isset( $cond['condition'] ) ) {
                continue;
            }

            if (
                'city' === $cond['condition'] &&
                '==' === $cond['operator']
            ) {
                $cities .= $cities ? ', ' : '';
                $cities .= $cond['value'];
            }
        }
    }

    $cities = preg_split( '/, */', $cities );

    return array_unique( array_filter( $cities ) );
}

На что обратить внимание:

  • На WooCommerce & rarr; Настройки & rarr; Страница расширенной бесплатной доставки , $rate_id - та, которая стоит после post=, как в http://example.com/wp-admin/post.php?post=123&action=edit. Наведите указатель мыши на Бесплатная доставка строк таблицы, и вы увидите Изменить URL-адрес с таким запросом post.

  • Вы должны использовать название города, а не его слизень. Например. Den Haag вместо den-haag. См. изображение , которое вы предоставили.

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