Отображение пользовательского сообщения на основе зоны доставки и категорий товаров в Woocommerce - PullRequest
0 голосов
/ 04 декабря 2018

Я использую Woocommerce, чтобы попытаться написать функцию PHP (как новичок взломать вещи из других постов здесь и в других местах) ...

:) Кажется, я наконец-то справился с этим (раньше)кто-нибудь даже откликнулся на мой пост!), так что вот в случае, если он окажется полезным для всех - не стесняйтесь сообщать мне о любых улучшениях, я действительно не PHP-человек!

Функция нижебудет отображаться уведомление в верхней части корзины / оформления заказа только , когда продукты категории 'A' находятся в заказе и , покупатель не в Великобританииили EU.

add_action( 'woocommerce_before_checkout_form' , 'shipping_zone_targeted_postcodes_custom_notice' );
add_action( 'woocommerce_before_cart_table', 'shipping_zone_targeted_postcodes_custom_notice' );
function shipping_zone_targeted_postcodes_custom_notice() {
  // HERE DEFINE YOUR SHIPPING ZONE NAME(S)
  $targeted_zones_names = array('UK', 'EU'); // <======  <======  <======  <======  <======  

  // Get the customer shipping zone name
  $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod
  $chosen_method     = explode(':', reset($chosen_methods) );
  $shipping_zone     = WC_Shipping_Zones::get_zone_by( 'instance_id', $chosen_method[1] );
  $current_zone_name = $shipping_zone->get_zone_name();

  // set your special category name, slug or ID here:
  $special_cat = '(CATEGORY 'A')';
  $bool = false;
  foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $item = $cart_item['data'];
    if ( has_term( $special_cat, '(CATEGORY 'A')', $item->id ) )
      $bool = true;
  }

  if( !in_array( $current_zone_name, $targeted_zones_names ) && $bool ){
    echo '<p class="message-text">(CUSTOM TEXT)</p>';    
  }
}

Мой код в основном сделан из этой ветки ответов:
Отображение пользовательского сообщения на основе зоны доставки клиентов в Woocommerce

1 Ответ

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

В вашем коде есть некоторые ошибки и ошибки, такие как:

  • Это $special_cat = '(CATEGORY 'A')'; делает ошибку и должно быть вместо:

    $special_cat = "(CATEGORY 'A')";
    
  • В if ( has_term( $special_cat, '(CATEGORY 'A')', $item->id ) ) $item->id необходимо вместо $item->get_id()
    и '(CATEGORY 'A')' заменить на правильный продукткатегория таксономии , которая составляет 'product_cat', поэтому:

    if ( has_term( $special_cat, 'product_cat', $item->get_id() ) )
    

Но для категорий продуктов , которые вы будете использоватьвместо (для обработки вариантов продукта тоже) :

if ( has_term( $special_cat, 'product_cat', $cart_item['product_id'] ) )

Таким образом, полный функциональный код должен быть:

add_action( 'woocommerce_before_checkout_form', 'shipping_zone_targeted_postcodes_custom_notice' );
add_action( 'woocommerce_before_cart_table', 'shipping_zone_targeted_postcodes_custom_notice' );
function shipping_zone_targeted_postcodes_custom_notice() {

    // HERE DEFINE YOUR SHIPPING ZONE NAME(S)
    $targeted_zones_names = array('UK', 'EU'); // <======  <======  <======  <====== 

    // Get the customer shipping zone name
    $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod
    $chosen_method     = explode(':', reset($chosen_methods) );
    $shipping_zone     = WC_Shipping_Zones::get_zone_by( 'instance_id', $chosen_method[1] );
    $current_zone_name = $shipping_zone->get_zone_name();

    // Set your special category name, slug or ID here:
    $special_cat = "(CATEGORY 'A')";
    $bool = false;

    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( has_term( $special_cat, 'product_cat', $cart_item['product_id'] ) )
            $bool = true;
    }

    if( ! in_array( $current_zone_name, $targeted_zones_names ) && $bool ){
        echo '<p class="message-text">(CUSTOM TEXT)</p>';    
    }
}

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

Похожие: Отображение пользовательского сообщения на основе зоны доставки клиентов в Woocommerce

...