WooCommerce: назначить члена в зону доставки

Недавно я получил эту ошибку. Я скомпилировал двоичный код с -O3. Google сказал мне, что это означает «незаконный код операции», который казался мне подозрительным. Затем я отключил все оптимизации и повторил. Теперь ошибка превратилась в segfault. Следовательно, установив -g и запустив valgrind, я отследил источник и зафиксировал его. Повторное включение всех оптимизаций не показало никаких дальнейших проявлений незаконной инструкции 4.

По-видимому, оптимизация неправильного кода может дать странные результаты.

1
задан LoicTheAztec 25 February 2019 в 18:33
поделиться

1 ответ

Обновление (2019) - Вы должны подумать, что иначе, используя woocommerce_email_recipient_new_order для добавления определенных получателей электронной почты в зависимости от зоны доставки:

add_filter( 'woocommerce_email_recipient_new_order', 'custom_email_recipient_new_order', 10, 2 );
function custom_email_recipient_new_order( $recipient, $order ) {
    // Avoiding backend displayed error in Woocommerce email settings
    if ( ! is_a( $order, 'WC_Order' ) ) 
        return $recipient;

    // Get the shipping country and postcode
    $country_code = $order->get_shipping_country();
    $postcode     = $order->get_shipping_postcode();

    // Get All Zone IDs
    $zone_ids    = array_keys( array('') + WC_Shipping_Zones::get_zones() );

    // Loop through Zone IDs
    foreach ( $zone_ids as $zone_id ) {
        // Get the shipping Zone object
        $shipping_zone = new WC_Shipping_Zone($zone_id);

        // Loop through Zone locations
        foreach ( $shipping_zone->get_zone_locations() as $location ){
            if ( ( $location->type === 'postcode' && $location->code === $postcode ) 
            || ( $location->type === 'country' && $location->code === $country_code ) ) {
                $the_zone_id   = $zone_id;
                $the_zone_name = $shipping_zone->get_zone_name(); // (You can use the the zone name too)
                break;
            } 
        }
        if($found) break;
    }

    if( $the_zone_id == 0 ) {
        $recipient .= ',' . 'james.collins@gmail.com';
    } elseif( $the_zone_id == 2 ) {
        $recipient .= ',' . 'jean.dubreuil@gmail.com';
    } elseif( $the_zone_id == 3 ) {
        $recipient .= ',' . 'joel.chalamousse@gmail.com';
    } else {
        $recipient .= ',' . 'isabelle.frottin@gmail.com';
    }

    return $recipient;
}

Код помещается в файл function.php вашей активной детской темы (или активной темы). Это должно работать.

0
ответ дан LoicTheAztec 25 February 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: