Squeak.ru - шаблоны программирования

Отображать ВСЕ доступные способы доставки для каждого конкретного заказа на страницах редактирования заказов администратором в Woocommerce.

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

Это список, который я хочу зафиксировать:

Это список, который я хочу захватить


Вещи как

  • «Бесплатная доставка» для заказов на определенную сумму
  • «Доставка грузов» для определенных товаров и т. д.

Моя цель – отобразить ВСЕ доступные методы для каждого конкретного заказа и отобразить их на странице «Редактировать заказ/Сведения о заказе» в панели администратора.

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

Это то, что у меня есть до сих пор:

add_action( 'woocommerce_checkout_update_order_meta', 'save_available_shipping_methods' );
 
function save_available_shipping_methods( $order_id ) {
    $shippingmethods = WC()->cart->get_shipping_methods();
    update_post_meta( $order_id, '_shipping_methods', $shippingmethods );
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'get_available_shipping_methods', 10, 1 );

function get_available_shipping_methods($order){
    $order = wc_get_order( $order_id );
    if ( $order ) {
        echo '<p><strong>'.__('Available Shipping Methods: ').'</strong> ' . get_post_meta($order->get_shipping_methods(), '_shipping_field_value', true ) . '</p>';
    }
}

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

Вот где я хотел бы поместить это. Текущий хук помещает поле под адрес доставки

Вот куда я хотел бы его поместить. Текущий хук помещает поле под адрес доставки


  • $order уже содержит всю необходимую информацию, см. раздел Получение сведений о доставке заказов в WooCommerce 3. так что крючка woocommerce_admin_order_data_after_shipping_address достаточно, нет необходимости использовать update_post_meta 08.07.2020
  • Теперь, когда я перечитал ваш вопрос, намерен ли он отображать выбранный клиентом способ доставки? или вы хотите перечислить ВСЕ доступные способы доставки для этого конкретного заказа? 08.07.2020
  • Я хочу отобразить ВСЕ доступные методы для каждого конкретного заказа 08.07.2020
  • Ссылка на связанный вопрос 09.07.2020

Ответы:


1
  • В хуке woocommerce_checkout_update_order_meta доступные пакеты доставки хранятся через update_post_meta
  • Комментарии с объяснением добавлены в код
function action_woocommerce_checkout_update_order_meta( $order_id ) {
    // Get shipping packages
    $packages = WC()->shipping()->get_packages();
    
    // Set array
    $rate_labels = array();
    
    // Loop trough packages
    foreach ( $packages as $key => $package ) {
        // Loop through package rates
        foreach( $package['rates'] as $rate_id => $rate ) {
            // Push to array
            $rate_labels[] = $rate->get_label();
        }
    }

    // NOT empty
    if ( ! empty ( $rate_labels ) ) {
        // Update post meta
        update_post_meta( $order_id, '_available_shipping_methods', $rate_labels );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 1 ); 

// Display on the order edit page (backend)
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
    // Get meta
    $rate_labels = $order->get_meta( '_available_shipping_methods' );
    
    // True
    if ( $rate_labels ) {
        // Loop trough rate labels
        foreach( $rate_labels as $rate_label ) {
            // Output
            echo '<p>' . $rate_label . '</p>';
        }
    }
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );
08.07.2020
  • Работает как шарм! Огромное спасибо! Теперь я хотел бы посмотреть, смогу ли я добавить цены, для которых мы указали каждый метод. Любые предложения по этому поводу? 09.07.2020
  • Да, в цикле foreach «цикл по пакетам» вы можете использовать что-то вроде $rate_cost = $rate->get_cost();. См. Класс WC_Shipping_Rate. - Начните, и если вы не доберетесь туда, не стесняйтесь задавать новый вопрос с возможной ссылкой на этот вопрос С уважением 09.07.2020
  • Цените помощь. Спасибо! 09.07.2020
  • Поэтому я добавил ссылки на стоимость в цикле foreach, функцию update_post_meta и эхо, и кажется, что по всем направлениям возвращается только 0,00. Я пропустил часть? Спасибо еще раз. 09.07.2020
  • Просто чтобы проверить это, не принимая во внимание другие факторы, что, если вы замените $rate_labels[] = $rate->get_label(); на $rate_labels[] = $rate->get_cost(); в моем ответе. Что вы получаете в результате? 09.07.2020
  • хорошо, тогда это просто вопрос добавления этой стоимости в массив. Можно сделать через мультимассив, 2 массива, конкатенируя значения в виде строки в уже существующем массиве,... как видите, цены обрабатываются корректно. Как я упоминал ранее, если вы не можете найти решение, не стесняйтесь открывать новый вопрос. С уважением 09.07.2020
  • Я разместил здесь более пересмотренный вопрос: stackoverflow.com/questions/62819259/ . Спасибо за вашу помощь! 09.07.2020

  • 2

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

     // Capture the available shipping methods, and costs: 
          function action_woocommerce_checkout_update_order_meta( $order_id ) {
          // Get shipping packages
             $packages = WC()->shipping()->get_packages();
            
        // Set array
        $rate_labels = array();
        $rate_costs = array();
        
        // Loop trough packages
        foreach ( $packages as $key => $package ) {
            // Loop through package rates
            foreach( $package['rates'] as $rate_id => $rate ) {
                // Push to array
                $rate_labels[] = $rate->get_label();
                $rate_costs[] = $rate->get_cost();
            }
        }
    
        // NOT empty
        if ( ! empty ( $rate_labels ) ) {
            // Update post meta
            update_post_meta( $order_id, '_available_shipping_methods', $rate_labels );
            update_post_meta( $order_id, '_available_shipping_method_cost', $rate_costs );
        }
    }
    add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 1 ); 
    
    // Make it display on the edit order page:
    function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
        // Get meta
        $rate_labels = $order->get_meta( '_available_shipping_methods' );
        $rate_costs = $order->get_meta( '_available_shipping_method_cost' );
        
        $methods = array ( $rate_labels, $rate_costs );
        
        // True
        if ( $rate_labels ) {
            // Loop
            echo '<p><strong>Shipping Methods: </strong>';
            foreach(array_combine($rate_labels, $rate_costs) as $rate_label => $rate_cost) {
                 echo '<p>' . $rate_label . ' - $' . $rate_cost . '</p>';
            }
        }
        
    }
    add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );
    
    09.07.2020
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...