Intereting Posts
При использовании WordPress Multisite можно отображать данные на главный сайт из дочерних сайтов? как ограничить вход пользователя в систему всякий раз, если пользователь приостановит работу путем редактирования действия wp-login? Получение переменной внутри foreach от PHP до JS после локализации Запустить функцию после публикации сообщения Как показать еще одну ссылку из другого блога multisite? update_option не сохраняет массив, но сохраняет строку 'Array' Как перечислить все сообщения, упорядоченные по категориям> год> сообщение в 4-мерном списке Как использовать аутентификацию WordPress на странице, отличной от WordPress? Создание больших страниц с несколькими разделами с расширенными настраиваемыми полями WordPress – обновлять все существующие сообщения одновременно Добавить контент, как только начнется <body> Есть ли способ получить URL-адрес файла из поля ACF отношения? Несколько экземпляров запроса Featured Image Показывать только родительские атрибуты продуктов на боковой панели Форма комментария не поддерживается тегами изображений

after_setup_theme всегда запускается

Я создаю дочернюю тему для некоторых из моих преподавателей, и в качестве части темы мне хотелось бы включить несколько плагинов в то время, когда тема активирована. Поэтому, естественно, я использовал действие after_setup_theme и вызвал мою функцию настройки. Он отлично работает, за исключением того, что он запускается на КАЖДОМ запросе (admin и в противном случае). Я доказал это, добавив это к концу функции настройки:

echo '<script type="text/javascript">alert("This action was run")</script>';

И в результате получите предупреждение javascript для каждого запроса администратора и каждого внешнего запроса (у меня есть сетевая настройка, поэтому, очевидно, на сайтах, где эта тема не активна, она не запускает функцию)

Так что вопрос в том, что это ошибка? Я что-то делаю неправильно? Вот полный код, который я использую:

 add_action( 'after_setup_theme', 'fwp_setup' ); function fwp_setup(){ // -- Unrelated code remove for the sake of brevity require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php'); activate_plugin('enable-media-replace/enable-media-replace.php'); activate_plugin('seo-image/seo-friendly-images.php'); activate_plugin('w3-total-cache/w3-total-cache.php'); echo '<script type="text/javascript">alert("This action was run")</script>'; } 

Любое понимание было бы высоко оценено!

РЕШЕНИЕ: after_switch_theme делает именно то, что я намеревался здесь. Он запускается после того, как тема переключается на вашу тему. В одном из решений, упомянутых ниже, используется switch_theme . Это не дает желаемых результатов, так как это происходит только при отключении от вашей темы.

Вот статья, которую я нашел в качестве ссылки: http://core.trac.wordpress.org/ticket/7795#comment:29

Вот мой модифицированный код

 add_action( 'after_switch_theme', 'fwp_theme_setup' ); function fwp_theme_setup(){ require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php'); activate_plugin('enable-media-replace/enable-media-replace.php'); activate_plugin('seo-image/seo-friendly-images.php'); activate_plugin('w3-total-cache/w3-total-cache.php'); } 

Действие after_setup_theme предназначено для after_setup_theme каждой загрузки WordPress. Это просто часть процесса, во время которого WordPress вызывает систему шаблонов, определяет различные параметры настройки для темы, а затем переходит к последующей обработке, например, определение правильного шаблона для отображения и т. Д.

Другими словами, after_setup_theme представляет точку, в которой WordPress устанавливает текущую тему, а не точку, в которой администратор активирует и / или настраивает текущую тему.

То, что вы ищете, – это крючок активации темы, который в настоящее время недоступен, но находится на рассмотрении / разработке .

К сожалению, нет крючка активации темы. Тем не менее, этот вопрос действительно обеспечивает обход для этого.

Просто используйте «hook для активации темы», чтобы активировать подключаемые модули.

Лучшее решение, в том же духе, – это одно . Оба по существу используют switch_theme hook.


В соответствии с комментариями OP и связанным after_switch_theme билетом – after_switch_theme – требуемый крючок.

Это передает название старой темы в качестве аргумента. Однако, если это в ваших functions.php (который должен быть …), обратный вызов будет срабатывать только при активации вашей темы .

 add_action( 'after_switch_theme', 'wpse50298_setup' ); function wpse50298_setup($theme_switching_from){ // Your theme is being activated } 

Аналогично, добавление обратного вызова к switch_theme будет switch_theme только тогда, когда ваша тема деактивирована.

 add_action( 'switch_theme', 'wpse50298_deactivate' ); function wpse50298_deactivate($theme_switching_to){ // Your theme is being deactivated } 

Лучшим решением может быть использование сценария активации плагина Томаса Гриффина . Это заставит пользователей устанавливать плагины по вашему выбору, когда тема используется. Я думаю, что это отличный способ отделить плагин от темы и по-прежнему использовать его.

В своей теме проверьте, активен ли плагин, прежде чем использовать его функции. Это позволит пользователям больше выбирать и контролировать.

Вы можете легко настроить сценарий активации с помощью Knapsack .

Лучше всего исправить теперь можно использовать switch_theme hook и фильтровать переданный аргумент $ theme, чтобы увидеть, является ли он текущим, а если не возвращать;

 function nw_update_network($theme) { if ($theme !== 'my_theme_name') return; // Your code here } add_action('switch_theme', 'nw_update_network');