web-dev-qa-db-fra.com

Est-ce que add_filter fonctionne en dehors de functions.php

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

?>
2
Keryn Gill

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.

3
bosco