27

誰かがWooCommerceコアJavascriptファイル、特にフロントエンドファイルをオーバーライドする適切な方法について教えてもらえますか?これに関するドキュメントは見つかりませんでした。コードを見ると、フロントエンドスクリプトファイルへのパスがプラグインにハードコードされているため、テーマにアセットフォルダーを配置しても何も起こらないと思います。

テーマディレクトリにあるファイルをロードできるようにするための最もクリーンな方法は何ですか?

ありがとう

4

3 に答える 3

34

add-to-cart.jsを除いて、同じ問題が発生しました。簡単な解決策は、woocommerceスクリプトをデキューし、代わりのスクリプトをエンキューすることです。私の場合、functions.phpに以下を追加しました。

wp_dequeue_script('wc-add-to-cart');
wp_enqueue_script( 'wc-add-to-cart', get_bloginfo( 'stylesheet_directory' ). '/js/add-to-cart-multi.js' , array( 'jquery' ), false, true );

'wc-add-to-cart-variation'スクリプトをDEQUEUEする必要があります。同じ名前でENQUEUEする必要はないと思います、そうしない理由はわかりませんでした。

お役に立てれば。

WordPressバージョン4.0.1およびWooCommerceバージョン2.2.10を使用している場合。次のスクリプトを使用できます。


wp_deregister_script('wc-add-to-cart');
wp_register_script('wc-add-to-cart', get_bloginfo( 'stylesheet_directory' ). '/js/add-to-cart-multi.js' , array( 'jquery' ), WC_VERSION, TRUE);
wp_enqueue_script('wc-add-to-cart');

于 2012-11-27T02:33:43.250 に答える
32

WooCommerceはフロントエンドのスクリプトとスタイルをclass-wc-frontend-scripts.phpファイルにロードし、スクリプトがどのように登録、エンキュー、ローカライズ、依存関係にあるかを確認できます。

Wordpressでスクリプトをエンキューするのに適した場所は、wp_enqueue_scriptsアクションフックです。これは、Wordpressが完全に読み込まれた後、出力が行われる前の瞬間だからです。また、関連するすべてのスクリプトとスタイルをコードの1つのセクションにエンキューするのも好きです。

一部のスクリプトを完全に削除する場合は、wp_deregister_script()またはwp_dequeue_script()を呼び出すだけで十分です。ただし、プラグインがテーマの前にロードされるため、変更を加えて既存の依存関係、変数、およびローカリゼーションを残したい場合は、問題が発生することがあります。そのため、エンキュー関数は期待どおりに機能しません。Simplewp_dequeue_script() => wp_enqueue_script()は機能しませんwp_deregister_script() => wp_register_script()は機能しますが、ローカライズされたデータは失われます。


これは、以下を介してロードまたは登録さ$wp_scriptsれたすべてのスクリプトを含み、管理するグローバルオブジェクトを直接操作することで解決できます。wp_enqueue_script()wp_register_script()

    add_action( 'wp_enqueue_scripts', 'load_theme_scripts' );

    function load_theme_scripts() {
        global $wp_scripts; 
        $wp_scripts->registered[ 'wc-add-to-cart' ]->src = get_template_directory_uri() . '/woocommerce/js/wc-add-to-cart.js';
    }
于 2014-03-25T23:39:26.860 に答える
1

このセクションをfunction.phpに追加します

function themeslug_enqueue_script() {
wp_enqueue_script( 'add-to-cart-variation', get_bloginfo( 'url' ). '/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.js', false );
}
add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_script' );
于 2013-11-20T04:43:24.267 に答える