WooCommerce에서 특정 배송 클래스에 대한 배송 방법 숨기기
기본적으로 정액 요금 방식 ID를 만들려고 합니다.flat_rate:7
배송 클래스 "Roller"(ID)를 가진 카트 품목이 있는 경우 비활성화됩니다.92
).
제가 시도한 코드는 다음과 같습니다.
add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 10, 2);
function wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package)
{
$hide_when_shipping_class_exist = array(
92 => array(
'flat_rate:7'
)
);
$shipping_class_in_cart = array();
foreach(WC()->cart->cart_contents as $key => $values) {
$shipping_class_in_cart[] = $values['data']->get_shipping_class_id();
}
foreach($hide_when_shipping_class_exist as $class_id => $methods) {
if(in_array($class_id, $shipping_class_in_cart)){
foreach($methods as & $current_method) {
unset($available_shipping_methods[$current_method]);
}
}
}
return $available_shipping_methods;
}
배송 클래스 ID는 배송 클래스이며 숨기고 싶다.flat_rate:7
할 수 있을 것 같아요.
내 사이트: http://www.minimoto.me/ WordPress: 4.8.4 WooCommerce: 3.1.1
어떤 도움이라도 주시면 대단히 감사하겠습니다.
업데이트 2019: 대신 다음과 같이 짧고 컴팩트하며 효과적인 방법을 시도해 보십시오.
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 92;
// HERE define the shipping method to hide
$method_key_id = 'flat_rate:7';
// Checking in cart items
foreach( $package['contents'] as $item ){
// If we find the shipping class
if( $item['data']->get_shipping_class_id() == $class ){
unset($rates[$method_key_id]); // Remove the targeted method
break; // Stop the loop
}
}
return $rates;
}
코드가 기능합니다.php 파일 또는 임의의 플러그인 파일에 있는 활성 자식 테마(또는 테마)입니다.
테스트 및 동작.
경우에 따라서는, 배송지로의 배송 방법을 갱신하고 나서, 「정액 운임」의 배송 방법을 무효화/저장하고, 다시 유효/저장할 필요가 있습니다.
관련: WooCommerce에서 특정 배송 클래스에 대한 배송 방법 숨기기
배송 방법 ID와 배송 클래스 ID를 찾으려면 아래를 참조하십시오.
다양한 배송 방법 업데이트(코멘트 관련):
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 92;
// HERE define the shipping methods you want to hide
$method_key_ids = array('flat_rate:7', 'local_pickup:3');
// Checking in cart items
foreach( $package['contents'] as $item ) {
// If we find the shipping class
if( $item['data']->get_shipping_class_id() == $class ){
foreach( $method_key_ids as $method_key_id ){
unset($rates[$method_key_id]); // Remove the targeted methods
}
break; // Stop the loop
}
}
return $rates;
}
테스트 및 동작...
배송 클래스 ID를 찾는 중입니다.
- 아래의 데이터베이스
wp_terms
테이블:
용어 이름 또는 용어 slug를 검색하면 용어 ID(출고 클래스 ID)가 표시됩니다.
- Woocommerce 출하 설정에서 "Flat rate"를 편집하는 경우 브라우저 html 검사 도구를 사용하여 다음과 같은 출하 클래스 환율 필드를 검사합니다.
input name Attribute에는 다음과 같은 특징이 있습니다.woocommerce_flat_rate_class_cost_64
64는 배송 클래스 아이디입니다.
배송 방법 요금 ID를 가져옵니다.
예를 들어 관련된 배송방식의 레이트 ID를 취득하려면 브라우저 코드인스펙터에서 다음과 같은 각 관련 옵션버튼 속성을 검사합니다.
Loic The Aztec의 코드(치어)를 수정함으로써 카트 전체가 아닌 내용물의 배송 등급에 따라 각 패키지의 배송 방법을 설정할 수 있었습니다.다른 사람에게도 도움이 될 수 있습니다.
// UNSET A SHIPPING METHOD FOR PACKAGE BASED ON THE SHIPPING CLASS(es) OF ITS CONTENTS
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
foreach( $package['contents'] as $package_item ){ // Look at the shipping class of each item in package
$product_id = $package_item['product_id']; // Grab product_id
$_product = wc_get_product( $product_id ); // Get product info using that id
if( $_product->get_shipping_class_id() != 371 ){ // If we DON'T find this shipping class ID
unset($rates['wbs:9:dae98e94_free_ups_ground']); // Then remove this shipping method
break; // Stop the loop, since we've already removed the shipping method from this package
}
}
return $rates;
}
이 코드를 사용하면 패키지에 '표준' 항목(내 경우 shipping_class_id 371)이 포함되지 않은 경우 '무료 UPS Ground' 배송 설정을 해제할 수 있습니다.
원래의 투고로부터의 시나리오(배송 클래스 y의 경우는 메서드x 를 무효로 합니다)는, 다음과 같이 동작합니다.
// UNSET A SHIPPING METHOD FOR PACKAGE BASED ON THE SHIPPING CLASS(es) OF ITS CONTENTS
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
foreach( $package['contents'] as $package_item ){ // Look at the shipping class of each item in package
$product_id = $package_item['product_id']; // Grab product_id
$_product = wc_get_product( $product_id ); // Get product info using that id
if( $_product->get_shipping_class_id() == 92 ){ // If we DO find this shipping class ID
unset($rates['flat_rate:7']); // Then remove this shipping method
break; // Stop the loop, since we've already removed the shipping method from this package
}
}
return $rates;
}
언급URL : https://stackoverflow.com/questions/47718180/hide-shipping-methods-for-specific-shipping-class-in-woocommerce
'programing' 카테고리의 다른 글
클래스 상수를 구현하는 방법 (0) | 2023.02.22 |
---|---|
반응 시 svg 이미지에 색상을 추가하는 방법 (0) | 2023.02.18 |
gatsby 사이트에 Google 글꼴을 추가하려면 어떻게 해야 합니까? (0) | 2023.02.14 |
React에서 JSON의 데이터 해석JS (0) | 2023.02.14 |
SQL 오류: ORA-00933:SQL 명령이 올바르게 종료되지 않음 (0) | 2023.02.14 |