在wordpress子主题上解决与父主题的javascript冲突

时间:2015-02-28 13:47:43

标签: javascript ajax wordpress wordpress-theming buddypress

我已经构建了Divi Theme的子主题,可以与Buddypress一起使用。到目前为止一切顺利,除了评论按钮上的脚本冲突。

主题使用以下函数加载javascript(js/custom.js at 2642:2662):

    $( 'a[href*=#]:not([href=#])' ).click( function() {
        if ( $(this).closest( '.woocommerce-tabs' ).length && $(this).closest( '.tabs' ).length ) {
            return false;
        }

        if ( location.pathname.replace( /^\//,'' ) == this.pathname.replace( /^\//,'' ) && location.hostname == this.hostname ) {
            var target = $( this.hash );
            target = target.length ? target : $( '[name=' + this.hash.slice(1) +']' );
            if ( target.length ) {
                et_pb_smooth_scroll( target, false, 800 );

                if ( ! $( '#main-header' ).hasClass( 'et-fixed-header' ) && $( 'body' ).hasClass( 'et_fixed_nav' ) && $( window ).width() > 980 ) {
                        setTimeout(function(){
                        et_pb_smooth_scroll( target, false, 200);
                    }, 500 );
                }

                return false;
            }
        }
    });

此事件定位与Buddypress用于评论的相同按钮,防止在点击时加载AJAX表单。

enter image description here

我不想编辑父主题(custom.js)。我该如何防止这种冲突?是否有解决方法,可能来自 functions.php

更新

稍后使用[wp_dequeue_script] [4]加载该脚本,不起作用。在functions.php

中使用此代码时
function de_script() {
    wp_dequeue_script( 'divi-custom-script' );
}
add_action( 'wp_print_scripts', 'de_script', 100 );

然后根本没有加载完整的脚本(custom.js)。

2 个答案:

答案 0 :(得分:0)

首先,要解决javascript冲突,我在我的主题tl_custom.js文件夹下设置了一个简单的js/,其中包含以下代码

jQuery(document).ready(function($) {
    //  Remove handler set by themes/Divi/js/custom.js at line 2642
    $( 'a[href*=#]:not([href=#])' ).off();
});

然后我在functions.php

中添加以下代码的脚本
function tl_custom_scripts() {
    if ( ! is_admin() ) {
        $scriptsrc = get_stylesheet_directory_uri() . '/js/';
        wp_register_script( 'tl_custom', $scriptsrc . 'tl_custom.js', '', '', true );
        wp_enqueue_script( 'tl_custom' );
    }
}
add_action( 'wp_enqueue_scripts', 'tl_custom_scripts', 20 );

主要问题是父主题在页脚中注册custom.js,因此我必须将wp_register_script最后一个参数设置为true,然后将add_action优先级设置为20。

答案 1 :(得分:0)

这个答案现在可能有点太晚了,但我目前正在研究一个我继续研究的继承项目。我发现他们在更新的Wordpress上使用了Divi主题,触发了上述所有错误。

我检查了源错误,发现此选择器不正确:

$( 'a[href*=#]:not([href=#])' )

我通过将其更改为此而不影响任何功能来修复此问题:

$( 'a[href*=\\#]:not([href=\\#])' )

它也适用于此:

$( 'a[href*="#"]:not([href="#"])' )

问题已修复,该代码块的功能仍在运行。