Как сделать так, чтобы способ доставки разрешал или запрещал другие условия для работы в WooCommerce?

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Мне нужно сделать так, чтобы WooCommerce разрешал проверку только тогда, когда в корзину добавляются товары определенных категорий. У меня уже есть для этого рабочий код. Но мне нужно сделать этот код доступным только тогда, когда выбранный способ доставки отличается от доставки в магазине. Есть какие-нибудь советы, как это сделать?

Вот код, который я использую, чтобы требовать добавления определенных продуктов в корзину:

`

 `function sv_wc_prevent_checkout_for_category() {  // set the slug of the category for which we disallow checkout $category = 'clothing';  // get the product category $product_cat = get_term_by( 'slug', $category, 'product_cat' );  // sanity check to prevent fatals if the term doesn't exist if ( is_wp_error( $product_cat ) ) {  return; }  $category_name = 'lt;a href="' . get_term_link( $category, 'product_cat' ) . '"gt;' . $product_cat-gt;name . 'lt;/agt;';  // check if this category is the only thing in the cart if ( sv_wc_is_category_alone_in_cart( $category ) ) {    // render a notice to explain why checkout is blocked  wc_add_notice( sprintf( 'Hi there! Looks like your cart only contains products from the %1$s category amp;ndash; you must purchase a product from another category to check out.', $category_name ), 'error' ); } } add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_category' );   function sv_wc_is_category_alone_in_cart( $category ) {    // check each cart item for our category  foreach ( WC()-gt;cart-gt;get_cart() as $cart_item_key =gt; $cart_item ) {    // if a product is not in our category, bail out since we know the category is not alone  if ( ! has_term( $category, 'product_cat', $cart_item['data']-gt;id ) ) {  return false;  }  }    // if we're here, all items in the cart are in our category  return true; }  

Ответ №1:

Вам нужно получить текущий метод выбора. Вы можете использовать WC()-gt;session-gt;get('chosen_shipping_methods') метод, чтобы получить текущий выбор.

Добавьте в свою sv_wc_is_category_alone_in_cart() функцию условие ниже.

 if( WC()-gt;session-gt;get('chosen_shipping_methods')[0] == 'your-shipping-method-name' ){  return false; }  

Попробуйте выполнить приведенный ниже код.

 function sv_wc_prevent_checkout_for_category() {   // set the slug of the category for which we disallow checkout  $category = 'test-1';   // get the product category  $product_cat = get_term_by( 'slug', $category, 'product_cat' );   // sanity check to prevent fatals if the term doesn't exist  if ( is_wp_error( $product_cat ) ) {  return;  }   $category_name = 'lt;a href="' . get_term_link( $category, 'product_cat' ) . '"gt;' . $product_cat-gt;name . 'lt;/agt;';   // check if this category is the only thing in the cart  if ( sv_wc_is_category_alone_in_cart( $category ) ) {    // render a notice to explain why checkout is blocked  wc_add_notice( sprintf( 'Hi there! Looks like your cart only contains products from the %1$s category amp;ndash; you must purchase a product from another category to check out.', $category_name ), 'error' );  } } add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_category' );   function sv_wc_is_category_alone_in_cart( $category ) {   if( WC()-gt;session-gt;get('chosen_shipping_methods')[0] == 'local_pickup:8' ){  return false;  }    // check each cart item for our category  foreach ( WC()-gt;cart-gt;get_cart() as $cart_item_key =gt; $cart_item ) {    // if a product is not in our category, bail out since we know the category is not alone  if ( ! has_term( $category, 'product_cat', $cart_item['data']-gt;id ) ) {  return false;  }  }    // if we're here, all items in the cart are in our category  return true; }  

Проверено и работает. Я протестировал этот код с моей категорией товара и способом доставки, поэтому не забудьте изменить значение с вашим.