Eコマースに http://woothemes.com/woocommerce/ プラグインを使用しています。ローカルのjQueryを登録していますが、Google CDNからのデフォルトのjQuery呼び出しと競合しています。
長い時間がかかりましたが、私はこの問題をwoocommerce.php
内の次のコード行に限定しました。
$suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
$lightbox_en = (get_option('woocommerce_enable_lightbox')=='yes') ? true : false;
$chosen_en = (get_option('woocommerce_enable_chosen')=='yes') ? true : false;
$jquery_ui_en = (get_option('woocommerce_enable_jquery_ui')=='yes') ? true : false;
$scripts_position = (get_option('woocommerce_scripts_position') == 'yes') ? true : false;
// Woocommerce.min.js is minified and contains woocommerce_plugins
wp_enqueue_script( 'woocommerce', $this->plugin_url() . '/assets/js/woocommerce'.$suffix.'.js', array('jquery'), '1.0', $scripts_position );
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
wp_enqueue_script( 'woocommerce_plugins', $this->plugin_url() . '/assets/js/woocommerce_plugins'.$suffix.'.js', array('jquery'), '1.0', $scripts_position );
}
それらを削除すると、重複したjQuery呼び出しがキャンセルされ、頭痛の種になります。私はヘッダからjQueryをデキューするためにfunctions.php
に以下を持っています、しかし何らかの理由で、それは固執して、消えることを拒否します! :/ functions.php
内からローカルのjQuery呼び出しを強制終了するにはどうすればいいですか?コードに問題がありますか? :
// dequeue jquery from header
function theme_slug_dequeue_header_jquery() {
wp_dequeue_script( 'jquery' );
}
add_action( 'wp_header', 'theme_slug_dequeue_header_jquery', 11 );
実際にはそれはあなたの呼び出しjqueryが間違っているように見えます。あなたはalwayswp_enqueue_scriptを使うべきです、そうでなければあなたは衝突を求めます。手動で呼び出さないでください。
WooCommerceから貼り付けた行は、jqueryを直接ロードするのではなく、他のスクリプトの依存関係を設定することによってロードします。 WordPressが残りを処理します。
CDNからjQueryを使用したい場合は、登録解除してCDNバージョンに再登録してください。コードを貼り付けるのではなく、次の例を参考にしてください。
http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/
私は同様の問題を抱えていたし、このスレッドにつまずく。
私の問題は、WooCommerce 2.0.5が自分でjQueryを登録していて、それが私自身のjQueryスクリプトを壊して、functions.php deregister/register/enqueueプロセスと衝突することでした。
何度か試した後、私は自分の関数にjQueryバージョンが含まれていないことに気付きました。具体的に追加した後、問題は解決しました。
これがwoocommerce/woocommerce.phpの動作です(行1214)。
public function check_jquery() {
global $wp_scripts;
// Enforce minimum version of jQuery
if ( isset( $wp_scripts->registered['jquery']->ver ) && $wp_scripts->registered['jquery']->ver < '1.7' ) {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.7' );
wp_enqueue_script( 'jquery' );
}
}
そして、これは私が自分のfunctions.phpファイルでそれをオーバーライドする方法です
function my_scripts_method() {
wp_deregister_script( 'jquery' );
wp_register_script(
'jquery',
'http://code.jquery.com/jquery.js',
false,
'1.9.1' // IMPORTANT: declare jQuery version
);
wp_enqueue_script( 'jquery' );
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
これが他の人に役立つことを願っています:)