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