J'ai un extrait de code dans mon fichier functions.php qui fonctionne correctement ...
/**
* Disable free shipping for select products
*
* @param bool $is_available
*/
function my_free_shipping( $is_available ) {
global $woocommerce;
$ineligible = array( '4616', '14031' );
$cart_items = $woocommerce->cart->get_cart();
foreach ( $cart_items as $key => $item ) {
if( in_array( $item['product_id'], $ineligible ) ) {
return false;
}
}
return $is_available;
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'my_free_shipping', 20 );
Cependant, je ne veux pas que mon client se mêle du fichier functions.php. J'ai donc créé un plugin.
A créé un mon plugin dossier, et à l'intérieur de ce dossier un my-plugin.php fichier. Dans ce fichier PHP, j'ai copié et collé exactement la fonction ci-dessus, puis supprimé du fichier functions.php. Une fois que j'ai fait ça, ça a cessé de fonctionner.
Comme le plugin se trouve dans un dossier différent du fichier functions.php, j’assume que je dois ajouter quelque chose pour le lire à partir du mon plugin dossier, mais je ne suis pas sûr de ce que c'est. Je ne suis même pas sûr que le add_filter peut être utilisé en dehors du fichier functions.php.
Modification pour inclure le fichier de plug-in complet
<?php
/*
Plugin Name: WooCommerce - Disable Free Shipping
Plugin URI: http://www.gfishdesigns.com
Description: Allows the user to disable free shipping on a per product basis by entering in the IDs of specific products.
Author: Karen Gill
Version: 1.0
Author URI: http://www.gfishdesigns.com
Copyright 2016 Karen Gill (email : [email protected])
*/
/**
* Disable free shipping for select products
*
* @param bool $is_available
*/
function my_free_shipping( $is_available ) {
global $woocommerce;
$excluded = array( '4616', '14031' );
$cart_items = $woocommerce->cart->get_cart();
foreach ( $cart_items as $key => $item ) {
if( in_array( $item['product_id'], $excluded ) ) {
return false;
}
}
return $is_available;
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'my_free_shipping', 20 );
#---------------------------------------------------
# Load CSS
#---------------------------------------------------
function dfs_load_scripts() {
wp_enqueue_style( 'style-name', plugins_url( '/dfs-plugin/dfs_plugin_style.css' ) );
}add_action( 'wp_enqueue_scripts', 'dfs_load_scripts' );
#---------------------------------------------------
# Load other plugin files and configuration
#---------------------------------------------------
include_once(plugin_dir_path( __FILE__ ) . 'dfs-plugin-shortcode.php');
include_once(plugin_dir_path( __FILE__ ) . 'dfs-plugin-options.php');
?>
Les fonctions de manipulation des filtres et des actions sont disponibles à tout moment une fois que WordPress a chargé wp-includes/plugin.php
- cela se produit assez tôt car WordPress lui-même dépend de ces fonctions, de sorte qu'elles sont toujours accessibles aux fichiers de thème et aux plug-ins.
Vous devez ajouter informations d'en-tête à votre fichier pour que WordPress puisse le reconnaître en tant que plug-in, puis activer le plug-in dans le tableau de bord administratif de votre installation.
/*
Plugin Name: My Plugin
Description: Disable free shipping for select products
Author: Keryn Gill
*/
/**
* Disable free shipping for select products
*
* @param bool $is_available
*/
function my_free_shipping( $is_available ) {
global $woocommerce;
$ineligible = array( '4616', '14031' );
$cart_items = $woocommerce->cart->get_cart();
foreach ( $cart_items as $key => $item ) {
if( in_array( $item['product_id'], $ineligible ) ) {
return false;
}
}
return $is_available;
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'my_free_shipping', 20 );
Sinon, placez votre fichier de plug-in directement dans wp-content/mu-plugins
pour que WordPress l'interprète comme un plug-in must-use - cela supprimera votre plug-in de la liste des tableaux de bord et le traitera comme s'il était toujours actif. Cette pratique est mieux réservée à votre propre code, car les plugins tiers placés dans ce répertoire ne déclencheront pas de hooks d'activation/désactivation et ne recevront pas de mises à jour automatiques.