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.
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.
Le déclarer comme
global $product_notfree_ship
comme vous le faites, il suffit d’y accéder via cette
$GLOBALS['product_notfree_ship'];