it-swarm.com.de

Funktioniert add_filter außerhalb von functions.php?

Ich habe ein Code-Snippet in meiner functions.php-Datei, das richtig funktioniert ...

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

Ich möchte jedoch nicht, dass mein Client mit der Datei functions.php in Konflikt gerät, also habe ich stattdessen ein Plugin erstellt.

Erschuf ein my-plugin Ordner und in diesem Ordner a my-plugin.php Datei. In diese PHP Datei kopiere und füge ich die obige Funktion genau ein und entferne sie aus der functions.php. Sobald ich das tat, hörte es auf zu arbeiten.

Da sich das Plugin in einem anderen Ordner als die Datei functions.php befindet, gehe ich davon aus, dass ich etwas hinzufügen muss, damit es von der Datei gelesen werden kann my-plugin Ordner, aber ich bin nicht sicher, was das ist. Ich bin mir nicht mal sicher, ob der add_filter kann außerhalb der functions.php Datei verwendet werden.


Bearbeitung mit vollständiger Plugin-Datei

<?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

Die Funktionen für die Filter- und Aktionsmanipulation stehen zu jedem Zeitpunkt nach dem Laden von wp-includes/plugin.php in WordPress zur Verfügung. Dies geschieht relativ früh, da WordPress selbst von diesen Funktionen abhängt und daher für Theme- und Plugin-Dateien immer verfügbar ist.

Sie müssen Ihrer Datei Header-Informationen hinzufügen, damit WordPress sie möglicherweise als Plug-In erkennt, und dann das Plug-In im Verwaltungs-Dashboard Ihrer Installation aktivieren.

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

Alternativ können Sie Ihre Plugin-Datei auch direkt in wp-content/mu-plugins platzieren, damit WordPress sie als Muss-Plugin interpretiert. - Dadurch wird Ihr Plugin aus der Dashboard-Liste entfernt und so behandelt, als ob es immer aktiv wäre. Diese Vorgehensweise ist am besten für Ihren eigenen Code reserviert, da Plugins von Drittanbietern, die in diesem Verzeichnis abgelegt sind, weder Aktivierungs-/Deaktivierungs-Hooks auslösen noch automatische Updates erhalten.

3
bosco