在WooCommerce子级/模板中调用全局变量数组

时间:2016-02-02 作者:RobBenz

所以我在我的函数文件中有这个-它定义了不符合免费送货条件的产品。一切正常。

//functions.php
function my_free_shipping( $is_available ) {
global $woocommerce;

// set the product ids that are $product_notfree_ship
$product_notfree_ship = array( \'1\', \'2\', \'3\', \'4\', \'5\' );

// get cart contents
$cart_items = $woocommerce->cart->get_cart();

// loop through the items looking for one in the ineligible array
foreach ( $cart_items as $key => $item ) {
    if( in_array( $item[\'product_id\'], $product_notfree_ship ) ) {
        return false;
    }
}

// nothing found return the default value
return $is_available;
}
add_filter( \'woocommerce_shipping_free_shipping_is_available\',    \'my_free_shipping\', 20 );  
我输入到阵列中的所有产品ID$product_notfree_ship 被拒绝免费送货。

现在,我想打电话给产品页面上的产品ID,查看他们是否应该收到“免费送货”消息或“附加运费”

所以在我的主题/woocommerce/单一产品/产品形象中。php(我想在主img之后)文件

//theme/woocommerce/single-product/template.php
$product_notfree_ship = array( \'1\', \'2\', \'3\', \'4\', \'5\' );
// this is commented because it didn\'t work, 
// global $product_notfree_ship;

if ( is_single($product_notfree_ship) ) {
 echo \'Additional Shipping Charges Apply\';
} else {
    echo \'FREE SHIPPING on This Product\';
}
现在,这是可行的,如果需要将新产品id添加到“非免费配送产品阵列”,那么必须同时编辑这两个阵列会让人觉得很愚蠢

所以根据答案here

我想如果打电话global $product_notfree_ship;if 正确的代码将运行,但它没有运行。

这是因为我在使用is_single() ? 这是因为它是一个数组,需要以不同的方式调用吗?

非常感谢您的帮助。非常感谢。

2 个回复
最合适的回答,由SO网友:Sumit 整理而成

一切都很好。您只需先声明变量global,然后就可以设置该变量的值并全局访问它。

function my_free_shipping( $is_available ) {
global $woocommerce, $product_notfree_ship;

// set the product ids that are $product_notfree_ship
$product_notfree_ship = array( \'1\', \'2\', \'3\', \'4\', \'5\' );
然后在另一个文件中再次使用时再次全局声明

global $product_notfree_ship;

if ( is_single($product_notfree_ship) ) {
 echo \'Additional Shipping Charges Apply\';
} else {
    echo \'FREE SHIPPING on This Product\';
}
这就是全局变量的工作方式。

SO网友:DHRUV GUPTA

声明为

global $product_notfree_ship
在您进行操作时,只需通过此

$GLOBALS[\'product_notfree_ship\'];