WordPress как на ладони
wordpress jino

after_setup_theme хук-событие . WP 3.0

Вызывается каждый раз при загрузке страницы, сразу после того, как тема инициализирована. Обычно используется для того, чтобы установить базовые возможности темы: см. add_theme_support().

Это один из первых хуков, срабатывает прямо перед инициализацией WordPress, перед хуком init.

В отличии от хука init, на момент срабатывания этого хука, wordpress еще не определил авторизован пользователь или нет.

Использование

function action_function_name_11() {
	// Действия
}
add_action( 'after_setup_theme', 'action_function_name_11' );

Вызов в файле

do_action( 'after_setup_theme' );

Примеры

#1 Пример использования after_setup_theme из базовой темы Twenty Twelve

Этот пример показывает как использовать хук after_setup_theme, чтобы зарегистрировать (добавить) новые возможности для темы, такие как: поддержка миниатюр, форматов постов, картинки для шапки и т.д.

/** Укажем WordPress запустить функцию twentytwelve_setup() в момент действия хука 'after_setup_theme' */
add_action( 'after_setup_theme', 'twentytwelve_setup' );

// Установим параметры темы по умолчанию 
// и добавим поддержку дополнительных возможностей WordPress

function twentytwelve_setup() {

	// Возможность указывать файл стилей для визуального редактора. Поместите editor-style.css в папку темы.
	add_editor_style();

	// Поддержка форматов постов.
	add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

	// Поддержка миниатюр записи
	add_theme_support( 'post-thumbnails' );

	// Добавим ссылки на RSS постов и комметариев в head часть
	add_theme_support( 'automatic-feed-links' );

	// Сделаем тему доступной для перевода
	// Файлы перевода должны находиться в каталоге /languages/
	load_theme_textdomain( 'twentytwelve', get_template_directory() . '/languages' );

	$locale = get_locale();
	$locale_file = get_template_directory() . "/languages/$locale.php";
	if ( is_readable( $locale_file ) )
		require_once( $locale_file );

	// Поддержка навигационного меню wp_nav_menu()
	register_nav_menus( array(
		'primary' => __( 'Primary Navigation', 'twentytwelve' ),
		'Secondary' => __( 'Secondary Navigation', 'twentytwelve' ),
	) );

	// Поддержка установки произвольного заднего фона
	add_custom_background();

	// Устанавливаем и изменяем параметры в HEADER части темы
	if ( ! defined( 'HEADER_TEXTCOLOR' ) )
		define( 'HEADER_TEXTCOLOR', '' );

	// Указываем картинку для шапки, указывается только ссылка на картинку. %s - будет заменено на УРЛ - путь до каталога темы.
	if ( ! defined( 'HEADER_IMAGE' ) )
		define( 'HEADER_IMAGE', '%s/images/headers/path.jpg' );

	// Высота и ширина произвольного заголовка. Чтобы изменить эти значения, можно использовать хуки темы: twentytwelve_header_image_width  и twentytwelve_header_image_height.
	define( 'HEADER_IMAGE_WIDTH', apply_filters( 'twentytwelve_header_image_width', 940 ) );
	define( 'HEADER_IMAGE_HEIGHT', apply_filters( 'twentytwelve_header_image_height', 198 ) );

	// Будем использовать миниатюру поста для картинки в шапке для страниц и записей.
	// Нужные нам размеры: ширина 940 пикселей и высота 198.
	// Большие картинки будут уменьшены автоматически, 
	// а маленькие останутся без изменения.
	set_post_thumbnail_size( HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT, true );

	// Нам не нужен текст внутри картинки в шапке.
	if ( ! defined( 'NO_HEADER_TEXT' ) )
		define( 'NO_HEADER_TEXT', true );

	// Добавим возможность изменять стили картинки в шапке из админ-панели
	// add_custom_image_header( '', 'twentytwelve_admin_header_style' );
}

Связи хука

Используется в файле: wp-settings.php

Остальные хуки из файла: wp-settings.php:

Фрагменты кода хука after_setup_theme

Фрагмент из: wp-settings.php WP 4.8.2
...
$GLOBALS['wp_locale_switcher']->init();

// Load the functions for the active theme, for both parent and child theme if applicable.
if ( ! wp_installing() || 'wp-activate.php' === $pagenow ) {
	if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
		include( STYLESHEETPATH . '/functions.php' );
	if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
		include( TEMPLATEPATH . '/functions.php' );
}

/**
 * Fires after the theme is loaded.
 *
 * @since 3.0.0
 */
do_action( 'after_setup_theme' );

// Set up current user.
$GLOBALS['wp']->init();

/**
 * Fires after WordPress has finished loading but before any headers are sent.
 *
 * Most of WP is loaded at this stage, and the user is authenticated. WP continues
 * to load on the {@see 'init'} hook that follows (e.g. widgets), and many plugins instantiate
 * themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
 *
 * If you wish to plug an action once WP is loaded, use the {@see 'wp_loaded'} hook below.
 *
 * @since 1.5.0
 */
...
after_setup_theme 21 комментарий
Полезные 1 Все
  • campusboy1848 cайт: wp-plus.ru

    Какой смысл так писать, если, к примеру, просто в functions.php прописать

    add_theme_support( 'post-thumbnails' );

    И всё будет работать. Или это чисто чтобы при каких-то условиях отменить действие?

    Ответить1.5 года назад #
    • Kama4464

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

      Конкретный пример почему так лучше, а не иначе, я не могу привести, но если порыться то я думаю можно найти плюсы такого подключения, как минимум один - подключается там где ожидается, а не где-то еще...

      1
      Ответить1.5 года назад #
      • campusboy1848 cайт: wp-plus.ru

        Да сколько сайтов переделал - нигде такой "пример" подобрать не смог. А писать излишний код тоже некомильфо.

        Кстати, Тимур, не планинуешь по WooCommerce материалы выкладывать? Начал делать первый сайт на WC, а толковых сайтов-то с мануалами и нет. Тему надо писать с нуля, а все ресурсы рассказывают как использовать уже готовые темы. Такого я никак не ожидал, когда брался smile Часов 5 потрачена, но толком адекватных материалов по индивидуальной разработке пока не нашёл. Может что посоветуешь? На крайняк, буду лопатить эти готовые темы и выдирать код нужный.

        Ответить1.5 года назад #
        • Kama4464

          Кстати, Тимур, не планинуешь по WooCommerce материалы выкладывать?

          Нет, пока не планирую...

          Ответить1.5 года назад #
  • wp-cron.php

    Подскажите плиз хук срабатывающий при активации темы. Никак не могу найти

    Ответить1.3 года назад #
      • wp-cron.php

        это не то. Эти события срабатывают только при активации иной темы, а не текущей. Мне нужно навесить добавить в ВП новую роль при активации темы. И удалить при деактивации

        Ответить1.3 года назад #
        • campusboy1848 cайт: wp-plus.ru

          Вы просто плохо прочли спецификацию этих двух функций.

          Ответить1.3 года назад #
          • wp-cron.php

            и прочли и протестили

            Ответить1.3 года назад #
            • campusboy1848 cайт: wp-plus.ru
              add_action( 'after_setup_theme', 'activate_my_theme' );
              function activate_my_theme() {
              	add_option( 'activate_my_theme', 'true' );
              }
              
              add_action('switch_theme', 'deactivate_my_theme');
              function deactivate_my_theme () {
                delete_option('activate_my_theme');
              }

              Прекрасно записывается опция при активации темы и также прекрасно удаляется, когда тема меняется.

              Естественно, вместо добавления/удаления опция можно вставлять что требуется.

              Ответить1.3 года назад #
              • wp-cron.php

                вы не понимаете что такое активация темы

                1
                Ответить1.3 года назад #
                • wp-cron.php

                  вобщем уже не нужно. нашлось корявое решение http://wordpress.stackexchange.com/questions/6248/theme-activate-hook

                  1
                  Ответить1.3 года назад #
                • campusboy1848 cайт: wp-plus.ru

                  Вам с колокольни виднее.

                  Ответить1.3 года назад #
                  • wp-cron.php

                    я имею в виду из админки. Когда при нажатии на княпочку "Активировать". А ваше решение выполняется каждый раз при загрузке страницы

                    Ответить1.3 года назад #
                    • campusboy1848 cайт: wp-plus.ru

                      А ваше решение выполняется каждый раз при загрузке страницы

                      Я же понадеялся, что у Вас достаточно знаний модернизировать код. К примеру:

                      add_action( 'after_setup_theme', 'activate_my_theme' );
                      function activate_my_theme() {
                       $act_theme = update_option( 'activate_my_theme', 'true' );
                       if ( $act_theme ) add_my_role();
                      }

                      Вот и всё. Функция update_option очень быстро работает (микросекунды), можно ей приоритет дать, не буду объяснять почему, в её спецификации всё описано, хотя add_option не намного дольше будет отрабатываться.

                      В том коде, что Вы дали, делается тоже самое.

                      1
                      Ответить1.3 года назад #
                    • campusboy1848 cайт: wp-plus.ru

                      И ещё одно решение, которое 100% выполняется 1 раз, раз уж это так критично (хотя это экономия на спичках, как по мне):

                      add_action( 'after_setup_theme', 'activate_my_theme' );
                      function activate_my_theme() {
                      	if ( current_user_can('manage_options') && $_GET['activated'] == 'true' ) add_my_role();
                      }
                      2
                      Ответить1.3 года назад #
                    • wp-cron.php

                      спасибо. Интересное решение в конце smile

                      Ответить1.3 года назад #
              • Kama4464

                Спасибо за активность и поиск решения проблемы!

                Но самое правильное решение вы так и не нашли, а оно, как выяснялось есть, и без всяких костылей, и находится в ядре WP - это 2 хука, я их описал:

                Вот пример:

                Удаление опций при деактивации темы и добавление при активации

                // удаляем настройки темы при деактивации
                add_action('switch_theme', 'deactivate_my_theme');
                function deactivate_my_theme( $old_name ){
                	// доступны функции старой темы, но не новой
                
                	delete_option('mytheme_options');
                }
                
                // добавляем настройки темы при активации
                add_action('after_switch_theme', 'activate_my_theme' );
                function activate_my_theme( $new_name ){
                	// доступны функции новой темы, но не старой
                
                	$opt = array('opt1'=>'val1', 'opt2'=>'val2');
                
                	add_option('mytheme_options', $opt );
                }
                Ответить1.3 года назад #
                • campusboy1848 cайт: wp-plus.ru

                  Жаль не могу отвечать на комменты такой вложенности, потому отвечаю так. Такое решение было в самом начале дискуссии. Не понравилось оно человеку, потому что часть кода выполняется ВСЕГДА, а именно на хуке:

                  add_action( 'after_setup_theme', 'activate_my_theme' );
                  Ответить1.3 года назад #

Здравствуйте, !

Ваш комментарий