Получите список ГОРОДОВ по тарифам на доставку в зависимости от города

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

/**
 * 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' );

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

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

Получите список ГОРОДОВ по тарифам на доставку в зависимости от города

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

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

‘options’ => get_list_cities_from_shipping_rate(),


Вопрос :

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


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

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

Здесь у вас могут возникнуть проблемы! Зоны доставки Woocommerce позволяют определять регионы, которые могут быть основаны на стране, штате или почтовом индексе. Но я нигде не вижу конкретно город. docs.woocommerce.com/document/setting-up-shipping-zones

Cameron Hurd 08.05.2018 02:54

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

shabeer90 08.05.2018 15:01

Вы используете wordpress.org/plugins/woo-extra-flat-rate, и если да, то какую версию? Если нет, то какой плагин вы использовали и какова его версия?

Sally CJ 08.05.2018 15:12

@SallyCJ Я использую этот плагин wordpress.org/plugins/woocommerce-advanced-free-shipping Version 1.0.14

shabeer90 08.05.2018 16:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
1 995
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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 → Настройки → Расширенная бесплатная доставка$rate_id находится после post=, как в http://example.com/wp-admin/post.php?post=123&action=edit. Наведите указатель мыши на строки таблицы Тарифы на бесплатную доставку, и вы увидите URL-адрес Редактировать с этим запросом post.

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

Я добавил ваш код, но ничего не происходит. Подскажите, что такое $key = '_wafs_shipping_method_conditions';? Это таблица в базе данных, на которую вы ссылаетесь? И пробовал распечатать $conditions, ничего не возвращает.

shabeer90 09.05.2018 10:34

Это имя мета-ключа, в котором плагин хранит указанные вами правила. Можете ли вы разместить прямую ссылку на ZIP-файл версии плагина 1.0. * 14 *?

Sally CJ 09.05.2018 11:54

Я понимаю. Попробуйте изменить значение $key на _was_shipping_method_conditions (обратите внимание на was и wafs). Это должно сработать. Если нет, добавьте var_dump( $conditions ); после объявления $conditions в function и поделитесь его выводом. И извините, я должен был попросить ZIP-файл раньше ..

Sally CJ 09.05.2018 14:00

Ничего не произошло. когда я делаю var_dump( $conditions );, я получаю bool(false)

shabeer90 09.05.2018 15:14

Позвольте нам продолжить обсуждение в чате.

Sally CJ 09.05.2018 15:14

Другие вопросы по теме