ADD_FILTER在函数外工作吗。php

时间:2016-09-15 作者:KVDD

我的函数中有一个代码片段。正常工作的php文件。。。

/**
 * 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 ); 
然而,我不希望我的客户干扰功能。php文件,所以我制作了一个插件。

创建了一个“我的插件”文件夹,并在该文件夹中创建了一个“我的插件”。php文件。在该PHP文件中,我复制并粘贴了上述函数,并将其从函数中删除。php。一旦我这样做了,它就停止工作了。

因为插件与函数位于不同的文件夹中。php文件,我假设我必须添加一些东西才能从我的插件文件夹中读取,但我不确定这是什么。我甚至不确定add\\u过滤器是否可以在函数之外使用。php文件。

编辑以包含完整插件文件

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

?>

1 个回复
SO网友:bosco

加载WordPress后,过滤器和操作操作的功能在任何时候都可用wp-includes/plugin.php - 这种情况很早就发生了,因为WordPress本身依赖于这些函数,所以主题文件和插件文件都可以访问它们。

您需要添加header information 这样WordPress就可以将其识别为插件,然后在安装的管理仪表板中激活该插件。

/*
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 );
或者,将插件文件直接放入wp-content/mu-plugins 让WordPress将其解释为must-use plugin - 这将从仪表板列表中删除插件,并将其视为始终处于活动状态。这种做法最好为您自己的代码保留,因为放置在此目录中的第三方插件不会触发激活/停用挂钩,也不会收到自动更新。