所以我试图隐藏基于产品标签的Woocommerce中的某些船舶方法。我面临的主要问题是我自己缺乏PHP知识,所以我在一些非常友好的人的帮助下,将以下代码坦率地说出来:
add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_tag' , 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) {
if (isset($array_item['product_tag']) && $array_item['product_tag'] == "CHOSEN_TAG") { // Replace "CHOSEN_TAG" with what ever tag you want
$found = true;
break;
}
}
return $found;
}
function hide_shipping_based_on_tag( $available_methods ) {
// use the function abve to check the cart for the tag.
if ( check_cart_for_share() ) {
// remove the rate you want
unset( $available_methods['flat_rate'] ); // Replace "flar_rate" with the shipping option that yu want to remove.
}
// return the available methods without the one you unset.
return $available_methods;
}
我知道这段代码绝不是通用的,因此变量会因情况而异,但也许有人可以告诉我代码中是否有东西。非常感谢
答案 0 :(得分:5)
毫无疑问,你现在已经对它进行了排序,但是你的代码对我来说是一个好的开始...而且因为我对其进行了分类,所以我在下面发表了它。您的问题是,woocommerce在购物车阵列中没有product_tag,因此您必须去购买它。
/* !Hide Shipping Options Woocommerce */
add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_tag' , 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_tag', array( "fields" => "names" ) );
if (in_array("Heavy",$term_list)) { // Replace "Heavy" with what ever tag you want
$found = true;
break;
}
}
return $found;
}
function hide_shipping_based_on_tag( $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['flat_rate'] ); // Replace "flat_rate" with the shipping option that you want to remove.
}
// return the available methods without the one you unset.
return $available_methods;
}
答案 1 :(得分:0)
您可以使用Woocommerce的运输类来实现此目的。
以下是分步说明。
有关该代码段的详细信息,请here。
答案 2 :(得分:-2)
在主题的functions.php中使用它,或使用此代码创建插件。