编程语言
首页 > 编程语言> > php-在wordpress中替换排队脚本的正确方法?

php-在wordpress中替换排队脚本的正确方法?

作者:互联网

我需要从wordpress中删除jquery ui脚本(和其他一些),问题是如果我出队并注销了它们,则调用它们的插件不起作用,因为这些脚本“丢失了”,即使我用通过googleapis链接创建一个脚本.

我有以下几点:

add_action('wp_print_scripts','remove_excess_scripts', 100);
function remove_excess_scripts(){
  wp_dequeue_script( 'jquery-ui-core' );
  wp_dequeue_script( 'jquery-ui-widget' );
  wp_dequeue_script( 'jquery-ui-mouse' );
  wp_dequeue_script( 'jquery-ui-accordion' );
  wp_dequeue_script( 'jquery-ui-autocomplete' );
  wp_dequeue_script( 'jquery-ui-slider' );
  wp_dequeue_script( 'jquery-ui-progressbar' );
  wp_dequeue_script( 'jquery-ui-tabs' );
  wp_dequeue_script( 'jquery-ui-sortable' );
  wp_dequeue_script( 'jquery-ui-draggable' );
  wp_dequeue_script( 'jquery-ui-droppable' );
  wp_dequeue_script( 'jquery-ui-selectable' );
  wp_dequeue_script( 'jquery-ui-position' );
  wp_dequeue_script( 'jquery-ui-datepicker' );
  wp_dequeue_script( 'jquery-ui-tooltip' );
  wp_dequeue_script( 'jquery-ui-resizable' );
  wp_dequeue_script( 'jquery-ui-dialog' );
  wp_dequeue_script( 'jquery-ui-button' );

  wp_deregister_script( 'jquery-ui-core' );
  wp_deregister_script( 'jquery-ui-widget' );
  wp_deregister_script( 'jquery-ui-mouse' );
  wp_deregister_script( 'jquery-ui-accordion' );
  wp_deregister_script( 'jquery-ui-autocomplete' );
  wp_deregister_script( 'jquery-ui-slider' );
  wp_deregister_script( 'jquery-ui-progressbar' );
  wp_deregister_script( 'jquery-ui-tabs' );
  wp_deregister_script( 'jquery-ui-sortable' );
  wp_deregister_script( 'jquery-ui-draggable' );
  wp_deregister_script( 'jquery-ui-droppable' );
  wp_deregister_script( 'jquery-ui-selectable' );
  wp_deregister_script( 'jquery-ui-position' );
  wp_deregister_script( 'jquery-ui-datepicker' );
  wp_deregister_script( 'jquery-ui-tooltip' );
  wp_deregister_script( 'jquery-ui-resizable' );
  wp_deregister_script( 'jquery-ui-dialog' );
  wp_deregister_script( 'jquery-ui-button' );
}

加上前面的功能,我正确注册了jQuery ui并使其入队:

wp_register_script(
        'jquery-ui-all',
        "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js",
        array('jquery'),
        false,
        false
    );

function print_scripts() {
wp_enqueue_script( 'the-bootstrap' );   
}
add_action( 'wp_enqueue_scripts', 'print_scripts' );

(其中-bootstrap具有jquery-ui-all的依赖项)

所有这些工作都可以从Google加载jquery-ui且不再输出任何单独的UI文件-出现问题是因为插件WPFullCalendar将一堆jquery ui单个脚本作为依赖项使其脚本排入队列,我猜与他们注销并出队,其脚本无法获取输出,因为缺少依赖项?我收到以下错误(由于未输出其JS文件)

Uncaught ReferenceError: WPFC is not defined 

如何替换脚本,以便其他插件仍然可以排队或依赖它们,但是它们都输出相同的文件.我可以通过注销所有名称,然后使用googleapis作为源再次注册它们来实现,但是对于所有相同的googleapi链接,我仍然会收到15个不同的HTTP请求…我需要所有这些文件都指向1 googleapi文件,仅用于输出.这可能吗? (在已经成功调用/依赖于其他插件的其他插件之后,不应将它们从队列中出队-wp_print_scripts在所有插件入队后发生,不是吗?)

更新:

我对下面接受的答案进行了修改,使其更加具体,以免破坏依赖关系.这是更新代码,可正确注销脚本并从所有依赖的脚本中删除对脚本的依赖.确保执行此操作,用于替换注销的脚本的HTML(可能是head)加载得足够高,以便其他依赖于此的脚本随之出现.

//custom deregister scripts
function georgian_deregister_scripts(){
    global $wp_scripts;
    //scripts to deregister
    $deregisteredscripts = array('jquery-ui-core','jquery-ui-widget','jquery-ui-mouse','jquery-ui-accordion','jquery-ui-autocomplete','jquery-ui-slider','jquery-ui-progressbar' ,'jquery-ui-tabs','jquery-ui-sortable','jquery-ui-draggable','jquery-ui-droppable','jquery-ui-selectable','jquery-ui-position','jquery-ui-datepicker','jquery-ui-tooltip','jquery-ui-resizable','jquery-ui-dialog','jquery-ui-button');
    //degregister each script
    foreach($deregisteredscripts as $script)
      wp_deregister_script( $script );
    //remove deregistered scripts as dependencies of any other scripts depending on them  
    if(false != $wp_scripts->queue)
      foreach($wp_scripts->queue as $script)
        if(isset($wp_scripts->registered[$script]))
          $wp_scripts->registered[$script]->deps = array_diff($wp_scripts->registered[$script]->deps, $deregisteredscripts);
}
add_action('wp_enqueue_scripts', 'georgian_deregister_scripts', 101);

解决方法:

如果取消注册脚本,则该脚本不会排队,因此您有几个无用的命令.

现在,如何删除对要入队的(所有)脚本的依赖?此功能可以解决问题.

function customize_scripts_output(){
    global $wp_scripts;

    if(false != $wp_scripts->queue)
        foreach($wp_scripts->queue as $script)
            if(isset($wp_scripts->registered[$script]))
                $wp_scripts->registered[$script]->deps = array();
}
add_action('wp_enqueue_scripts', 'customize_scripts_output', 101);

标签:jquery-ui,wordpress-plugin,wordpress,php,jquery
来源: https://codeday.me/bug/20191122/2059982.html