WordPress хук активации темы?

16 февр. 2013 г., 18:59:29
Просмотры: 20.6K
Голосов: 16

Я знаю множество способов проверить, активирована ли тема, я просмотрел весь интернет. Я не ищу копирование этого кода. Однако меня интересует, появилась ли в версиях 3.3-3.5 новая функция, которая срабатывает при theme_init. Я видел какой-то хук в документации, связанный с выполнением действий после инициализации темы, но не могу вспомнить где.

Кто-нибудь знает?

0
Все ответы на вопрос 6
0
47

Для тех, кто наткнулся на этот вопрос; есть действие, на которое можно повесить хук (добавлено в версии 3.3.0), которое срабатывает только при активации новой темы: after_switch_theme

add_action('after_switch_theme', 'mytheme_setup_options');

function mytheme_setup_options () {
  //делаем что-то...
}

http://codex.wordpress.org/Plugin_API/Action_Reference/after_switch_theme

Чтобы выполнить что-то при деактивации темы, можно использовать родственное действие: switch_theme

27 сент. 2014 г. 22:33:31
1

С функционалом предварительного просмотра тем маловероятно, что когда-либо появится хук активации темы, поскольку темы должны работать даже без "активации".

16 февр. 2013 г. 19:21:22
Комментарии

Хорошее замечание, @mark-kaplun

wesamly wesamly
16 окт. 2016 г. 15:26:46
3

После попытки использования метода @sleepingkiwi я столкнулся с проблемой. Клиент может попробовать другую тему (даже если ненадолго), что может вызвать проблему из-за того, что созданный нами хук "on theme activation" сработал дважды.

Лучший метод — использовать after_switch_theme вместе с функцией WordPress update_option, чтобы сохранить и позже проверить уведомление об активации, делая этот метод надежным.

Пример:

add_action('after_switch_theme', 'sgx_activation_hook');
function sgx_activation_hook() {
    if(get_option('SOMEPREFIX_theme_activated') != '1') {

        update_option( 'SOMEPREFIX_theme_activated', '1' );

        // ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПРИ АКТИВАЦИИ ТЕМЫ ЗДЕСЬ

    }
}

Надеюсь, это поможет.

18 сент. 2017 г. 23:59:37
Комментарии

Так быть не должно, в кодексе указано, что он срабатывает только для текущей темы: Функции темы, привязанные к этому хуку, срабатывают только в теме (и/или дочерней теме), которая активируется. кодекс

Gerard Reches Gerard Reches
27 мая 2020 г. 01:57:26

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

Sagive Sagive
28 мая 2020 г. 16:56:39

Конечно, это упрощает задачу

Gerard Reches Gerard Reches
29 мая 2020 г. 02:11:24
0

Я использую этот код для создания хуков register_vuewp_theme и unregister_vuewp_theme, чтобы можно было легко прикреплять функции к этим хукам.

function register_vuewp() {
    $one = get_option('vuewp_theme');
    if (false == $one) {
        update_option('vuewp_theme', 'on');
        do_action('register_vuewp_theme');
    }
}
add_action('admin_init', 'register_vuewp');

function unregister_vuewp() {
    delete_option('vuewp_theme');
    do_action('unregister_vuewp_theme');
}
add_action('switch_theme', 'unregister_vuewp');
21 июл. 2023 г. 21:52:49
0

Хук действия after_switch_theme иногда может не сработать, потому что он выполняется только если старая тема все еще существует. Это описано в кодексе.

Вы также можете проверить это напрямую в файле wp-includes/theme.php в функции check_theme_switched(), где добавляется хук действия. Вы увидите, что хук действия "after_switch_theme" находится внутри условия if ( $old_theme->exists() ) {....}.

Если вы хотите быть уверены, что хук сработает каждый раз при активации темы, независимо от того, существует ли старая тема, вы можете создать свой собственный хук, подписавшись на изменение опции "stylesheet".

Каждый раз при активации темы эта опция сохраняет название новой активной темы. Например:

add_action( 'update_option_stylesheet','my_theme_activation_hook',20,3 );
add_action( 'update_site_option_stylesheet','my_theme_activation_hook',20,3 ); //Для мультисайтовых установок

function my_theme_activation_hook( $old_value, $value, $option ){
    //Добавляет хук действия после активации темы, независимо от существования старой темы
    do_action( 'my_after_theme_activation');
}

Затем вы можете использовать свой хук действия "my_after_theme_activation" или как вы решите его назвать.

Этот метод не идеален, потому что плагин также может обновить опцию "stylesheet" без реальной активации темы. Я не вижу причин, почему они должны это делать, но это возможно, и вы никогда не знаете. Так что я бы учитывал это.

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

Вы также можете подписаться на изменение опции "theme_switched" вместо "stylesheet". Это не проверялось, но судя по коду, похоже, что хук срабатывает два раза при активации новой темы. Первый раз для сохранения старой темы, и второй раз для сохранения значения "false".

3 нояб. 2022 г. 13:47:22
5
-5

Возможно, вы ищете хук after_setup_theme:

http://codex.wordpress.org/Plugin_API/Action_Reference/after_setup_theme

16 февр. 2013 г. 19:07:44
Комментарии

Можно ли использовать эту же функцию для выполнения действий после деактивации? В примере вроде бы так говорится, но я хочу уточнить

TheWebs TheWebs
16 февр. 2013 г. 19:11:39

можно работать с $_GET['previewed'] и $_GET['theme']

birgire birgire
16 февр. 2013 г. 19:20:32

-1, так как этот хук срабатывает при каждой инициализации WP. Он срабатывает после подключения файла functions.php темы, поэтому это не хук "активации".

Mark Kaplun Mark Kaplun
16 февр. 2013 г. 19:20:41

да, верно, но исправление для этого упомянуто на странице Codex — проверять указанные GET-параметры или $_GET['activated']

birgire birgire
16 февр. 2013 г. 19:23:46

Это плохой ответ, который я давно здесь оставил, пожалуйста, избегайте его, принятые ответы нельзя удалить, спасибо

birgire birgire
4 мар. 2022 г. 21:02:08