Если вы когда-нибудь разрабатывали плагин под 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, то данные куски кода не пройдут проверку, поэтому не советую вам их там использовать.