2013-11-20 2 views
3

Мне нужно удалить jquery ui-скрипты (и некоторые другие) из wordpress, проблема в том, что если я деактивирую и отменю регистрацию, тогда плагины, которые их называют, не работают, потому что скрипты «отсутствуют», хотя я загружаю все jquery ui с одним скриптом через ссылку googleapis.Правильный способ замены вложенных скриптов в wordpress?

У меня есть следующие:

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'); 
} 

Plus ранее в функциях я правильно зарегистрировать и епдиеие в Jquery пользовательский интерфейс с:

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)

Все это работает в том смысле, что jquery-ui загружается из Google, и ни один из отдельных файлов пользовательского интерфейса больше не выводится - проблема возникает из-за того, что плагин WPFullCalendar запускает свой скрипт с кучей jquery ui отдельных скриптов в качестве зависимостей и Я предполагаю, что с ними отменено регистрацию и отменено, его сценарий не получает результат, поскольку отсутствуют зависимости. Я получаю следующее сообщение об ошибке (из-за его JS-файла не выводится)

Uncaught ReferenceError: WPFC is not defined 

Как я могу заменить сценарии, так что другие плагины могут все еще епдиеие их или зависят от них, но они все выходные и тот же файл. Я могу сделать это, чтобы удалить все имена, а затем зарегистрировать их снова с googleapis в качестве источника, но затем я все равно получаю 15 различных HTTP-запросов для одной и той же ссылки googleapi ... Мне нужны все эти файлы, чтобы указать на 1 googleapi и только для вывода. Это возможно? (И не должны принимать их из очереди из очереди после других плагинов уже под названием/зависит от них успешно - wp_print_scripts происходит после всех плагинов ставит в очередь, нет?)

UPDATE:

Я изменил принятый ответ ниже, чтобы быть немного более конкретным, чтобы не нарушать что-либо еще в отношении зависимостей. Вот код обновления, чтобы должным образом отменить регистрацию скрипта и удалить его зависимость от любых используемых сценариев. Убедитесь, что если вы это сделаете, скрипт, который вы используете для замены отмененных регистраций, загружен достаточно высоко в HTML (возможно, в голове), так что другие скрипты, которые зависят от него, будут потом.

//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); 

ответ

3

Если вы отменили регистрацию сценария, он не попадает в очередь, поэтому у вас есть пара бесполезных команд.

Теперь, как насчет удаления зависимостей от (всех) скриптов, которые должны быть выставлены в очередь? Эта функция должна сделать трюк.

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); 
+0

благодарит за слово! Мыслительный процесс здесь был хорошим мышлением, однако я изменил его, чтобы удалить только зависимости, которые я заменяю, используя 'array_diff()'. Я добавлю код к вопросу, но примите ваш ответ - не стесняйтесь обновлять свой ответ для других, у кого есть подобные проблемы. – tsdexter

Смежные вопросы