Как отключить плагин на определённой странице (по условию)?
Есть уже рабочий сайт, и на него нужно натянуть лендинг. Но проблема в том что на сайте работает один плагин, который добавляет свои стили и скрипты на страницу. На всех страницах эти стили и скрипты нужны, но вот на лендинге они перебивают мои стили/скрипты, и это создаёт целую кучу проблем.
Есть ли возможность отключить этот плагин конкретно на одной странице?
В общем нашел ответ самостоятельно. Правда в моём случае он не помог, но люди пишут что у них всё работает. Вот код:
// 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 плагины.
Как это работает
Сейчас объясню что и почему... Дело в том, что плагины подключатся до события plugins_loaded, вот таким кодом в wp-settings.php:
Т.е. все активные плагины получает функция 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 строку-адрес? пробовал через запятую или массив передавать - не срабатывает, по крайней мере по докам так. Тоже передавать бы несколько значений в идеале, хотя можно конечно сделать просто добавляя другие строки и проверяя доп. условие.