Редирект после активации темы в WordPress

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

Для начала

WordPress плагины имеют метод активации, который очень полезен и может пригодиться для многих вещей. Один из популярных методов – редирект при активации, (activation redirect), который используется в большинстве популярных плагинов для перенаправления пользователя со страницы настроек или же с любой другой его страницы (в пределах админки естественно), когда пользователь активирует плагин.

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

Перенаправление

Обычно плагины используют функцию register_activation_hook() для этого. Но темы не имеют такой же функции/метода. Однако существует способ, который поможет обойти это ограничение.

Ниже приведен пример кода, который осуществляет редирект после активации темы:

add_action( 'admin_init', 'theme_redirect' );

function theme_redirect() {
    global $pagenow;
    if ( "themes.php" == $pagenow && is_admin() && isset( $_GET['activated'] ) ) {
        wp_redirect( esc_url_raw( add_query_arg( 'page', 'because', admin_url( 'themes.php' ) ) ) );
    }
}

Это довольно простой и на мой взгляд правильный способ перенаправления. В коде показан admin_init хук в котором используется глобальная переменная $pagenow вместо глобальной $hook_suffix, потому что $hook_suffix нельзя определить в хуке admin_init.

Код выше отражает сам редирект, но остается немного не законченным т.к перенаправляет на страницу because, которую мы еще не создали. Поэтому исправляем ситуацию кодом ниже:

add_action( 'admin_menu', 'theme_init_page' );

function theme_init_page(){
	add_theme_page(
		$page_title  = 'Заголовок',
		$menu_title  = 'Заголовок меню <span class="update-plugins"><span class="pending-count"></span></span>',
		$capability  = 'edit_theme_options',
		$menu_slug   = 'because',
		$cb_function = 'theme_page'
	);
}

function theme_page(){
  echo 'Текст';
}

Естественно, весь код вы можете использовать у себя в темах, размещая его просто в файле functions.php, но если вы работаете над созданием темы например для ThemeForest или WordPress.org, то данные куски кода не пройдут проверку, поэтому не советую вам их там использовать.

Подписаться на новые статьи