WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как отключить плагин на определённой странице (по условию)?

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

Есть ли возможность отключить этот плагин конкретно на одной странице?

Заметки к вопросу:
Altai 7.1 год назад

В общем нашел ответ самостоятельно. Правда в моём случае он не помог, но люди пишут что у них всё работает. Вот код:

// 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;
} );
0
Altai
7.1 год назад -1
  • 0
    Kama9619

    Тут вся сложность в том, что плагины подключаются очень рано. Код ниже рабочий, но при определенных условиях - его нужно подключить в 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...

    Freduense 4.8 лет назад

    Подскажите, пожалуйста, как отключить плагин только для главной страницы. В вашем примере было использовано: $pageuri = '/mypage'; Но как быть с главной страницей?

    Kama 4.8 лет назад

    Попробуй $pageuri = '/mypage'; заменить на $pageuri = '/';.

    Freduense 4.8 лет назад

    Спасибо за ответ. Но к сожалению пробовал уже так раньше - плагин отключается вообще для всех страниц, видимо "подхватывает" строку от корня сайта. Как-то бы получить именно адрес не далее корня?
    Можно конечно изловчиться с помощью разных условий, но все равно не очень гибко это. И верно ли понимаю, что функции strpos(); можно передать лишь 1 строку-адрес? пробовал через запятую или массив передавать - не срабатывает, по крайней мере по докам так. Тоже передавать бы несколько значений в идеале, хотя можно конечно сделать просто добавляя другие строки и проверяя доп. условие.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация