우커머스, 배송 클래스 기준 배송 방법 숨김
나는 배송 클래스를 기준으로 한 배송 방법을 제외한 모든 것을 숨기려고 노력하고 있는데, 본질적으로 특정 클래스에 속하는 제품이 선택되면 FedEx 밤샘 방법을 강요하는 것입니다.
이 코드부터 시작해서 아래와 같이 수정합니다.
add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_class' , 10, 1 );
function check_cart_for_share() {
// load the contents of the cart into an array.
global $woocommerce;
$cart = $woocommerce->cart->cart_contents;
$found = false;
// loop through the array looking for the tag you set. Switch to true if the tag is found.
foreach ($cart as $array_item) {
$term_list = wp_get_post_terms( $array_item['product_id'], 'product_shipping_class', array( "fields" => "names" ) );
if (in_array("Frozen",$term_list)) {
$found = true;
break;
}
}
return $found;
}
function hide_shipping_based_on_class( $available_methods ) {
// use the function above to check the cart for the tag.
if ( check_cart_for_share() ) {
// remove the rate you want
unset( $available_methods['canada_post,purolator,fedex:FEDEX_GROUND,fedex:GOUND_HOME_DELIVERY'] );
}
// return the available methods without the one you unset.
return $available_methods;
}
배송 방법을 숨기고 있는 것 같지는 않습니다.제가 뭘 놓쳤는지...
멀티 사이트 설치입니다. 캐나다 측에서 http://stjeans.harbourcitydevelopment.com 에서 테스트하고 있습니다.
저는 Table Rate 배송 모듈과 FedEx, Purolator 및 Canada Post 모듈을 실행하고 있습니다.
저도 같은 문제가 있었는데 당신의 코드를 수정하는 것이 도움이 되었습니다.한 가지 문제는 "wocommerce_available_shipping_methods" 필터가 wocommerce 2.1에서 더 이상 사용되지 않는다는 것입니다.따라서 새로운 "wocommerce_package_rates"를 사용해야 합니다.비슷한 작업을 위한 WooCommerce 튜토리얼도 있습니다.
그래서 필터 후크를 변경하고 조건이 맞는 경우 모든 배송 방법/요금을 반복하여 고객에게 표시하고 싶은 것을 찾아서 그로부터 새로운 배열을 만들고 이 배열을 반환합니다(단 하나의 항목만 포함).
제 생각에 당신의 문제는 주로 잘못된 미설정($available_methods[...]) 라인에 있었습니다.그렇게 될 리가 없습니다.
제 코드는 이렇습니다.
add_filter( 'woocommerce_package_rates', 'hide_shipping_based_on_class' , 10, 2 );
function hide_shipping_based_on_class( $available_methods ) {
if ( check_cart_for_share() ) {
foreach($available_methods as $key=>$method) {
if( strpos($key,'YOUR_METHOD_KEY') !== FALSE ) {
$new_rates = array();
$new_rates[$key] = $method;
return $new_rates;
}
}
}
return $available_methods;
}
경고!wocommerce_package_rates hook은 매번 불이 나는 것이 아니라 카트에 있는 아이템이나 수량을 바꿀 때만 불이 난다는 것을 알게 되었습니다.아니면 제가 보기엔 그렇게 보이거든요.어쩌면 카트 콘텐츠에 대해 어떻게든 사용 가능한 요금이 캐시될 수도 있습니다.
만약 누군가가 여기서 비틀거리면 왜 그러는지 궁금해 합니다.woocommerce_package_rates
실행 중이 아닙니다.다음 토막글을 사용하여 캐시를 지울 수 있습니다.
/**
* This implementation will disable the shipping rate cache.
* To conditionally disable the cache, replace `wp_rand()` with a conditional value.
* Changing the conditional value will invalidate the cache.
* Example: A hidden form field or a query string parameter.
*/
function wc_shipping_rate_cache_invalidation( $packages ) {
foreach ( $packages as &$package ) {
$package['rate_cache'] = wp_rand();
}
unset($package);
return $packages;
}
add_filter( 'woocommerce_cart_shipping_packages', 'wc_shipping_rate_cache_invalidation', 100 );
여기에 댓글이 달렸어요.woocommerce_package_rates
이 코드 조각에 대한 깃허브 기스트를 가리킨 후크.
벨로우 코드 스니펫을 사용하면 배송 클래스에 따른 배송 방법을 숨길 수 있습니다.자세한 설명은 여기에서 확인할 수 있습니다.
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(
42 => array(
'free_shipping'
)
);
$hide_when_shipping_class_not_exist = array(
42 => array(
'wf_shipping_ups:03',
'wf_shipping_ups:02',
'wf_shipping_ups:01'
),
43 => array(
'free_shipping'
)
);
$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]);
}
}
}
foreach($hide_when_shipping_class_not_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;
}
언급URL : https://stackoverflow.com/questions/23701467/woocommerce-hide-shipping-method-based-on-shipping-class
'programing' 카테고리의 다른 글
jQuery는 다른 클래스가 없는 특정 클래스가 있는 디브를 선택합니다. (0) | 2023.09.13 |
---|---|
값을 잘라내지 않고 Format-Table을 사용하려면 어떻게 해야 합니까? (0) | 2023.09.13 |
XML 레이아웃에서 Android 태그의 목적은 무엇입니까? (0) | 2023.09.13 |
div에서 클래스의 첫 번째 출현을 찾습니다. (0) | 2023.09.13 |
자바스크립트로 팝업을 열고 사용자가 언제 닫는지 감지할 수 있습니까? (0) | 2023.09.13 |