web-dev-qa-db-ja.com

Woocommerce child/templateでグローバル変数array()を呼び出します

だから私は私の機能ファイルにこれを持っています - それは無料発送の対象ではない製品を定義します。それはすべてうまくいきます。

//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 );  

私が配列$product_notfree_shipに入力したすべての製品IDは無料発送を拒否されています。

今すぐ私は彼らが「無料発送適用」メッセージまたは「追加送料が適用される」メッセージを受け取るべきであるかどうか確認するために製品ページのそれらの製品IDを呼び出したいです

だから私のテーマ/ woocommerce/single-product/product-image.php(私はmain 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を "Not-free-shipping-product-array"に追加する必要がある場合には、両方の配列を編集しなければならないのはばかげていると感じます。

だから答えに基づいて ここ

ifの前にglobal $product_notfree_ship;を呼び出すと正しいコードが実行されると思いましたが、そうではありませんでした。

is_single()を使っているからですか。これは配列であり、別の方法で呼び出す必要があるためですか。

任意の助けは大歓迎です。ありがとうございました。

1
RobBenz

すべて大丈夫です。最初に変数globalを宣言するだけで、その後にthisの値を設定してグローバルにアクセスできます。

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';
}

これがグローバル変数のしくみです。

1
Sumit

として宣言する

global $product_notfree_ship

あなたがしているように、ちょうどこれを通してそれにアクセスしてください

$GLOBALS['product_notfree_ship'];
0
DHRUV GUPTA