Как отключить плагин на определённой странице (по условию)?
Есть уже рабочий сайт, и на него нужно натянуть лендинг. Но проблема в том что на сайте работает один плагин, который добавляет свои стили и скрипты на страницу. На всех страницах эти стили и скрипты нужны, но вот на лендинге они перебивают мои стили/скрипты, и это создаёт целую кучу проблем.
Есть ли возможность отключить этот плагин конкретно на одной странице?
В общем нашел ответ самостоятельно. Правда в моём случае он не помог, но люди пишут что у них всё работает. Вот код:
// disable wp-approve-user plugin
add_filter( 'option_active_plugins', function( $template ) {
$template = array_filter( $template, function( $p ) {
return $p != 'wp-approve-user/wp-approve-user.php';
} );
return $template;
} );
Тут вся сложность в том, что плагины подключаются очень рано. Код ниже рабочий, но при определенных условиях - его нужно подключить в MU плагины.
// временное отключение подключения плагина по условию add_filter( 'option_active_plugins', 'kama_disable_plugin_by_cond' ); function kama_disable_plugin_by_cond( $active_plugins ){ // делаем что либо только на нужной нам странице - /mypage $pageuri = '/mypage'; if( false === strpos( $_SERVER['REQUEST_URI'], $pageuri) ){ $for_disable = 'kama-thumbnail/kama_thumbnail.php'; // плагин который нужно отключить // отключаем плагин если он есть if( $ind = array_search($for_disable, $active_plugins) ) unset($active_plugins[$ind]); } return $active_plugins; }Как это работает
Сейчас объясню что и почему... Дело в том, что плагины подключатся до события plugins_loaded, вот таким кодом в wp-settings.php:
// Load active plugins. foreach ( wp_get_active_and_valid_plugins() as $plugin ) { wp_register_plugin_realpath( $plugin ); include_once( $plugin ); } unset( $plugin );Т.е. все активные плагины получает функция wp_get_active_and_valid_plugins(), которая в свою очередь получает данные из опции active_plugins.
Так вот, этим хаком мы фильтруем то, что вернет get_option('active_plugins') - удаляем от туда ненужный плагин. Но чтобы прицепить нашу функцию к нужному нам хуку, нужно сделать это до срабатывания этого хука - подключать его раньше хука, а раньше всех плагинов подключаются только MU плагины и только от туда мы можем зацепить функцию к нужному нам хуку...
Далее, нам нужно проверить что мы находимся на нужной нам странице. На этапе работы MU плагинов WP еще вообще не начал ничего делать - он только подключает нужные файлы. Поэтому там даже близко еще не работают условные функции вроде is_page(). А это значит, что вычислить нужную нам страницу мы можем только по URL или как-то еще... Поэтому я в примере использовал глобальную переменную $_SERVER['REQUEST_URI'], которая содержит текущий запрашиваемый URL...
Подскажите, пожалуйста, как отключить плагин только для главной страницы. В вашем примере было использовано: $pageuri = '/mypage'; Но как быть с главной страницей?
Попробуй
$pageuri = '/mypage';заменить на$pageuri = '/';.Спасибо за ответ. Но к сожалению пробовал уже так раньше - плагин отключается вообще для всех страниц, видимо "подхватывает" строку от корня сайта. Как-то бы получить именно адрес не далее корня?
Можно конечно изловчиться с помощью разных условий, но все равно не очень гибко это. И верно ли понимаю, что функции strpos(); можно передать лишь 1 строку-адрес? пробовал через запятую или массив передавать - не срабатывает, по крайней мере по докам так. Тоже передавать бы несколько значений в идеале, хотя можно конечно сделать просто добавляя другие строки и проверяя доп. условие.
В плагин можно дописать.
$urldata_ex = parse_url($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], PHP_URL_PATH); if ($urldata_ex == 'site.ru/page/') //- не подключаем плагин на этой странице { } else { if ( ! defined( 'ABSPATH' ) ) { //- может иначе выглядеть, это собственно сам плагин, обычно в корне плагина страница, которую редактируем // вся страница //закрываем в самом конце }Доброго времени. Подскажите, пожалуйста, как отключить использование определенного плагина на странице /checkout , если в корзине есть виртуальные товары ?