web-dev-qa-db-ja.com

`functions.php`を通してWooCommerceからjQueryのフックを解除しますか?

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 );
1
Brian

実際にはそれはあなたの呼び出しjqueryが間違っているように見えます。あなたはalwayswp_enqueue_scriptを使うべきです、そうでなければあなたは衝突を求めます。手動で呼び出さないでください。

WooCommerceから貼り付けた行は、jqueryを直接ロードするのではなく、他のスクリプトの依存関係を設定することによってロードします。 WordPressが残りを処理します。

CDNからjQueryを使用したい場合は、登録解除してCDNバージョンに再登録してください。コードを貼り付けるのではなく、次の例を参考にしてください。

http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

2
Mike Jolley

私は同様の問題を抱えていたし、このスレッドにつまずく。

私の問題は、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');

これが他の人に役立つことを願っています:)

2
ChowKaiDeng