web-dev-qa-db-ja.com

Add_filterはfunctions.phpの外で動作しますか

私はfunctions.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 ); 

しかし、私は私のクライアントがfunctions.phpファイルをめちゃくちゃにしたくないので、代わりにプラグインを作りました。

を作成しました 私のプラグイン フォルダ、およびそのフォルダ内 my-plugin.php ファイル。そのPHPファイルに、上記の関数を正確にコピーして貼り付け、functions.phpから削除しました。私は一度それが動作を停止したことをやった。

プラグインはfunctions.phpファイルとは別のフォルダーにあるので、私はそれをから取得するために何かを追加する必要があると思います 私のプラグイン フォルダが、私はそれが何であるかわからない。よくわからない add_filter functions.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');

?>
2
Keryn Gill

WordPressがwp-includes/plugin.phpをロードした後はいつでもフィルタとアクションの操作のための関数が利用可能です - これはWordPress自体の多くがこれらの関数に依存しているのでかなり早く起こります、従ってそれらはテーマとプラグインファイルに常にアクセス可能です。

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が 必ず使用するプラグインとして解釈するようにします - これにより、ダッシュボードリストからプラグインが削除され、常にアクティブであるかのように扱われます。このディレクトリに配置されたサードパーティのプラグインは有効化/無効化フックを引き起こさないし、それらが自動更新を受け取ることもないので、このプラクティスはあなた自身のコードのために最もよく予約されています。

3
bosco