after_setup_theme завжди працює


11

Я встановлюю дочірню тему для деяких моїх викладачів, і, як частина теми, я хотів би, щоб у той час, коли тема була активована, кілька плагінів активувалися. Отже, я, природно, використовував дію after_setup_theme і викликав свою функцію настройки. Він чудово працює, за винятком того, що він працює на кожному запиті (адміністратор та інше). Я довів це, додавши це до кінця функції настройки:

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. Це не має бажаних результатів, оскільки це відбувається лише після відключення від вашої теми. Посилайтеся на цей коментар Trac
Аарон Вагнер,

будь ласка, опублікуйте це як відповідь , а не як коментар до вашого питання. :)
Чіп Беннетт

2
Вибачення. Мені це ще не дозволяло б зробити. Я додам його як відповідь трохи.
Аарон Вагнер

Відповіді:


8

РІШЕННЯ: 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');
}

5

after_setup_themeДія призначене для вогню на кожному WordPress навантаження. Це просто частина процесу, під час якого WordPress викликає систему шаблонів, визначає різні параметри налаштування для Теми, а потім продовжує подальшу обробку, наприклад визначення правильного шаблону для відображення тощо.

Іншими словами, after_setup_themeпозначає точку, в якій WordPress встановлює поточну Тему, а не точку, в якій адміністратор активує та / або налаштовує поточну Тему.

Що ви шукаєте, це гачок для активації теми , який наразі недоступний, але знаходиться на розгляді / розробці .


Вступ Кодексу посилання страшно вводить в оману те. Там написано: "Цей гачок викликається під час ініціалізації тем". Це означає, що гачок повинен бути викликаний, коли він активований. Я розумію, що ти кажеш. Страшно вводити в оману.
Аарон Вагнер

5
init !== activation. Зазвичай ви викликаєте __construct()функцію в php також initфункцію. Це означає: ініціалізуйте екземпляр.
кайзер

Квиток на проїзд 7 років і, здається, не буде виправлений!
numediaweb

4

На жаль, немає гачка для активації теми. Однак це питання дає змогу вирішити цю проблему .

Просто використовуйте «гачок активації теми», щоб активувати плагіни.

Краще рішення, уздовж тієї ж вени, - це і ця . Обидва по суті використовують 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викликати його лише тоді, коли ваша тема деактивована.

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

Жоден із цих варіантів не працював для мене. switch_themeпрацював лише після дезактивації теми. Однак after_switch_themeпрацювали чудово.
Аарон Вагнер

1
оновлена ​​відповідь :)
Стівен Гарріс

Здається, Switch_theme вже не працює. Я думаю, це через зміни в активації 3,4. Принаймні, це не працює для мене.
Джейк

after_switch_theme працює ідеально. Це має бути прийнятою відповіддю. Я використовую WP 3.5
Ardee Aram

0

Кращим рішенням може бути використання сценарію активації плагіна Томаса Гриффіна . Це запропонує користувачам встановити плагіни на ваш вибір, коли тема використовується. Я думаю, що це чудовий спосіб відокремити плагін від теми та все-таки використати його.

У межах своєї теми перевірте, чи активний плагін, перш ніж використовувати його функції. Це дозволить користувачам більше вибору та контролю.

Ви можете легко налаштувати сценарій активації за допомогою Knapsack .



0

Вашим найкращим виправленням буде зараз використовувати switch_themeгачок і відфільтрувати переданий аргумент '$ topic', щоб побачити, чи це поточний їх, а потім, якщо не повернутий;

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.