web-dev-qa-db-fra.com

Appelez la variable globale array () dans woocommerce child/template

J'ai donc ceci dans mon fichier de fonctions - il définit les produits qui ne sont pas éligibles pour la livraison gratuite. Cela fonctionne, tout va bien.

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

La livraison gratuite est refusée à tous les ID de produit que j'ai entrés dans le tableau $product_notfree_ship.

Maintenant, je souhaite appeler ces identifiants de produit sur les pages du produit pour vérifier s'ils doivent recevoir un message "Livraison gratuite" ou "Frais de livraison supplémentaires".

donc dans mon fichier thème/woocommerce/single-product/product-image.php (je le veux après l'img principale)

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

Maintenant, cela fonctionne, il est simplement stupide de devoir modifier les deux tableaux, au cas où un nouvel identifiant de produit doit être ajouté à la "matrice de produits non-free-shipping"

Donc, sur la base de la réponse ici

Je pensais que si on appelait global $product_notfree_ship; avant la if, le code approprié serait exécuté, mais ce n’était pas le cas.

Est-ce parce que j'utilise is_single()? Est-ce parce que c'est un tableau et qu'il faut l'appeler différemment?

Toute aide est appréciée. Je vous remercie.

1
RobBenz

Tout va bien. Vous avez juste besoin de déclarer la variable globale d'abord, ensuite vous pouvez définir la valeur de this et accéder globalement.

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

Puis à nouveau déclarer globalement lors de l'utilisation à nouveau dans un autre fichier

global $product_notfree_ship;

if ( is_single($product_notfree_ship) ) {
 echo 'Additional Shipping Charges Apply';
} else {
    echo 'FREE SHIPPING on This Product';
}

Voici comment fonctionne la variable globale.

1
Sumit

Le déclarer comme

global $product_notfree_ship

comme vous le faites, il suffit d’y accéder via cette

$GLOBALS['product_notfree_ship'];
0
DHRUV GUPTA