web-dev-qa-db-ja.com

プラグインとテーマの間の衝突を解決するにはどうすればいいですか?

私はPhotospaceを私のハッチプロwpテーマ内のギャラリースライダーとして使っています( あなたはここでチェックできます )。

スライド間のデフォルトのトランジション効果はクロスオーバー効果( この例のように )ですが、私のスライダーの効果は白にイメージフェードし、次に白にイメージフェードするようです。なぜこれが起こっているのかわからない。

これが他のスクリプトを呼び出すコードです。

    /* Enqueue scripts (and related stylesheets) */

add_action( 'wp_enqueue_scripts', 'hatch_pro_scripts' );
function hatch_pro_scripts() {

if ( !is_admin() ) {

    /* Enqueue Scripts */
    wp_enqueue_script( 'hatch_pro_fitvids', get_template_directory_uri() . '/js/fitvids/jquery.fitvids.js', array( 'jquery' ), '1.0', true );


    /* Enqueue Fancybox */
    if ( hybrid_get_setting( 'hatch_pro_fancybox_enable' ) ) {
        wp_enqueue_script( 'hatch_pro_fancybox', get_template_directory_uri() . '/js/fancybox/jquery.fancybox-1.3.4.pack.js', array( 'jquery' ), '1.0', true );     
        wp_enqueue_style( 'hatch_pro_fancybox-stylesheet', get_template_directory_uri() . '/js/fancybox/jquery.fancybox-1.3.4.css', false, 1.0, 'screen' );
        wp_enqueue_script( 'hatch_pro_footer-scripts', get_template_directory_uri() . '/js/footer-scripts.js', array( 'jquery', 'hatch_pro_fitvids', 'hatch_pro_fancybox' ), '1.0', true ); 
    } else {
        wp_enqueue_script( 'hatch_pro_footer-scripts-light', get_template_directory_uri() . '/js/footer-scripts-light.js', array( 'jquery', 'hatch_pro_fitvids' ), '1.0', true );   
    }
}

}

どうすればこれを解決できますか?

私はCSSには慣れていますが、PHPやその他のより重いコーディングにはあまり慣れていません。

3
Dave

テーマが テーマ開発標準 を使用してコーディングされている場合は、関数 wp_deregister_script を使用して、スライダーが使用されているページから競合するスクリプトを削除できます。


[更新]
最初の解決方法(一番下)は特定のプラグイン状況で(WP Touchを使用)有効でした。
これは正しいことだと思います。

add_action( 'wp_enqueue_scripts', 'wpse_77772_remove_theme_enqueues', 11 );

function wpse_77772_remove_theme_enqueues()
{
    if( is_front_page() || is_home() ) 
    {
        wp_dequeue_script('hatch_pro_fancybox');
        // etc
    }
}

[最初のバージョン]

たとえば、次のコードでは、プラグインのスクリプトとスタイルをすべて削除していますAlo Easy Mailサイトがモバイルデバイスで表示されている場合は、使用例についてコメントを確認してください。

テーマのfunctions.phpファイル(または子テーマ)の最後に置きます。

add_action( 'wp_head', 'wpse_77772_remove_plugin_scripts', 1 );

/**
 * You'd probably want to use
 * if( is_front_page() || is_home() ) 
 *
 * see: http://wordpress.stackexchange.com/q/30385/12615
 */
function wpse_77772_remove_plugin_scripts()
{
    if( wp_is_mobile() ) {
        remove_action('wp_head', 'add_css');
        wp_deregister_script('jqplot');
        wp_deregister_script('bar');
        wp_deregister_script('cax');
        wp_deregister_script('pol');
        wp_deregister_script('fun');
        wp_deregister_script('pie');
        wp_deregister_script('meg');
    }
}

こうすれば、 特定のページ から競合するスクリプトを削除して、残りのスクリプトをロードさせることができます。

テーマを wp_register_script で検索し、deregisterで使用するハンドルをつかみます。

remove_actionはテーマが持っているすべてのadd_actionに作用します。

4
brasofilo