WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

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

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

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

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

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

// 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
-1
1.8 год назад
  • 0
    Kama7099

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

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