Как включить / активировать WordPress плагин функцией автоматически

Пример вывода пути к файлу плагина через фильтр plugin_raw_meta

Доброго времени суток, друг!

Пару лет назад мне понадобилось в одном из плагинов реализовать возможность включать и выключать другой плагин при нажатии на кнопку. Я искал решение и обнаружил, что это сделать можно очень просто меня содержимое одного поля в таблице wp_options вордпресса. Это решение может пригодиться вам, например, если вы создали свою тему для wordpress и хотите, чтобы при активации вашей темы, включался какой-то связанный с ней плагин. Или же, чтобы при включении вашего плагина, активировался другой необходимый плагин (например, какой-нибудь фреймворк для плагинов).

И сейчас я с вами с удовольствием поделюсь этим ценным решением.

Итак, WordPress хранит все настройки движка, настройки тем и плагинов в таблице wp_options, и там же есть одна запись, которая нам и нужна. Она называется "active_plugins".

Ниже, я приведу пример кода, который будет включать или отключать функционально нужные нам плагины, а вы уже можете потом использовать его как вам угодно. А если вдруг вам что-то непонятно, то, пожалуйста, пишите в комментах ниже и я вам постараюсь помочь. Также, я поделюсь одной фишкой, которая позволит вам вывести содержимое опции active_plugins в вашей админке, чтобы отслеживать изменения ее значения.

В опции active_plugins в формате массива хранятся пути к главному скрипту каждого плагина, типа akismet/akismet.php, а не название или какой-нибудь другой идентификатор.

// подключаем нашу функцию к хуку admin_init,
// который исполняется в самом начале загрузки любой страницы админки
add_action( 'admin_init', 'gb_activate_plugins' );

function gb_activate_plugins()
{
 // проверяем права текущего пользователя, может ли он включать плагины
 if( ! current_user_can('activate_plugins') )
  wp_die(__('Упс, у вас недостаточно прав, чтобы включать плагины на этом сайте.'));

 $active_plugins = FALSE;
 // получаем список активных плагинов (это массив строк)
 $active_plugins = get_option('active_plugins');

 // если список получен успешно, идем дальше, это защита от ошибок
 if( $active_plugins )
 {
  // какие плагины нам нужно включить
  $plugins_to_push = array(
   'hello.php', // это Hello Dolly
   'akismet/akismet.php', // и Akismet
  );

  foreach( $plugins_to_push as $plugin )
  {
   // если плагин еще не включен, то заносим его в массив активных плагинов
   if( ! in_array( $plugin, $active_plugins ) )
   {
    array_push( $active_plugins, $plugin );
   }
  }

  // обновляем массив активных плагинов
  update_option( 'active_plugins', $active_plugins );

 } // endif $active_plugins
}

Функция, которая описана ниже, выводит на странице в админке Плагины - Установленные под каждым вашим плагином путь к его основному исполняемому файлу. Используйте ее, чтобы быстрее находить нужные вам строки. Можно вставить ее в functions.php вашей темы, как сделал я на скриншоте в начале этой заметки.

// подключить функцию к фильтру, который исполняется на странице
// со списком всех плагинов в админке, после ссылок "Активировать" / "Удалить"
add_filter( 'plugin_row_meta', 'gb_get_plugin_string', 10, 4 );

function gb_get_plugin_string( $plugin_meta, $plugin_file, $plugin_data, $status )
{
 // вывести путь к основному файлу плагина
 echo '<code>' . $plugin_file . '</code>';
 return $plugin_meta;
}

А как вы, если не секрет, будете использовать это решение? Если вам что-то непонятно, или что-то не получается, пожалуйста, задайте вопрос в комментах, а я попробую вам помочь.

Удачного дня!

[ Прочитайте комменты или напишите свой... ]

Как убрать класс "hentry", который вызывает ошибку микроразметки "hatom" в Google Вебмастере?

Привет!

Недавно один из моих клиентов пожаловался, что у него в панели Вебмастера Google в разделе "Вид в поиске" > "Структурированные данные" есть ошибки с форматом разметки "hatom".

Как исправить в панели вебмастера Google ошибку структурированных данных hentry / hatom

Дело в том, что требования Google к формату разметки и структурированных данных достаточно строги и не совпадают с использующимся на данный момент форматом в WordPress. Вы можете тоже проверить свой сайт через официальный инструмент гугла - Google’s Structured Data Testing Tool.

Класс микроразметки "hentry" предназначен для датированных (регулярных) материалов, например, для новостых лент или блог-постов, которые могут быть просканированы в правильном формате с помощью этого класса. Вордпресс же автоматически добавляет класс "hentry" с функцией post_class(), которая используется в шаблонах обычно примерно таким образом:

<?php the_ID(); ?> <!--<?php post_class(); ?>-->

Во многих темах для WordPress, даже в официальных / дефолтных темах типа Twenty Ten, функция post_class() используется во всех шаблонах, включая шаблон страниц (page.php). Но формат страниц в WordPress, в противоположность записям (то есть постам), обычно не включает в себя дату публикации и имени автора, потому что страницы обычно используются для статичного контента.

Но Google видит класс "hentry" на этих страницах, ожидает найти там же дату и имя автора, но не находит их, что и вызывает ошибку. А когда Google говорит об ошибках, внимательный вебмастер всегда обращает внимание. И конечно же, вы читаете эту заметку, что говорит о вашей внимательности и желании исправить ситуацию.

Решение ошибки с форматом разметки hentry в панели Вебмастера

Вам нужно добавить следующий код в functions.php вашей темы

function gb_themeslug_remove_hentry( $classes )
{
 if ( is_page() ) {
  $classes = array_diff( $classes, array( 'hentry' ) );
 }
 return $classes;
}
add_filter( 'post_class','gb_themeslug_remove_hentry' );

Как вы думаете, должно ли данное исправление быть внесено в WordPress по умолчанию?

Спасибо!

[ Прочитайте комменты или напишите свой... ]