Предыдущая часть нашей серии была «введением» в мир действий WordPress. В этом уроке мы начнем рассмотрение 50 выбранных действий, объяснив, что они делают, и увидим пример для каждого действия.
Итак, без лишних слов, вот первая партия из наших 50 действий!
Обработка инициализации WordPress
Короче говоря, это действие запускается сразу после того, как все готово, кроме заголовков. И именно поэтому это действие, вероятно, является самым популярным действием WordPress всех времен — потому что вы можете подключить к нему практически все.
Изменение нескольких правил перезаписи по умолчанию
Как турецкий пользователь WordPress, я нахожу странным (и разочаровывающим), что WordPress не позволяет нам изменять базы URL для страниц автора, результатов поиска или страниц страниц архива в административной панели.
Приведенный ниже фрагмент кода помогает мне в этой проблеме:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php
add_action( ‘init’, ‘init_example’ );
function init_example() {
global $wp_rewrite;
$wp_rewrite->author_base = ‘profile’;
$wp_rewrite->search_base = ‘find’;
$wp_rewrite->pagination_base = ‘p’;
}
?>
|
Круто, да? (Конечно, я заменил турецкие слова на «профиль», «найти» и «р», чтобы прояснить это.)
Отправка HTTP-заголовков
Это не нуждается в представлении, поскольку само его название объясняет: это небольшое удобное действие позволяет нам устанавливать заголовки HTTP для отправки!
Заставьте Internet Explorer использовать новейший движок рендеринга
Метатег X-UA-Compatible
позволяет Internet Explorer использовать указанный механизм рендеринга для веб-страницы. Если вы установите его в "edge"
, Internet Explorer будет использовать новейший механизм рендеринга; тем не менее, он нарушает проверку HTML, если используется с Google Chrome Frame.
К счастью, мы не ограничены использованием <meta>
: мы также можем использовать заголовки HTTP. И действие send_headers
идеально подходит для работы:
01
02
03
04
05
06
07
08
09
10
11
|
<?php
add_action( ‘send_headers’, ‘send_headers_example’ );
function send_headers_example() {
header( ‘X-UA-Compatible: IE=edge,chrome=1’ );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/send_headers
?>
|
Переключение тем
Если вы хотите выполнить некоторые поручения после переключения тем в WordPress, вы можете рассчитывать на действие after_switch_theme
.
Сброс правил перезаписи после переключения темы
Давайте сделаем простой: как вы очищаете правила переписывания после перехода на новую тему, потому что новая тема имеет новые пользовательские типы записей?
Ну, вы используете код ниже:
01
02
03
04
05
06
07
08
09
10
11
|
<?php
add_action( ‘after_switch_theme’, ‘after_switch_theme_example’ );
function after_switch_theme_example() {
flush_rewrite_rules();
}
// Example Source: http://wpdevsnippets.com/flush-rewrite-rules/
?>
|
Легко, правда?
По какой-то причине я не мог заставить это работать, подключив flush_rewrite_rules()
к действию after_switch_theme
и я не мог выяснить, почему — если у вас есть ответ, просвещайте нас в комментариях.
Добавление пользовательских столбцов в список сообщений
Это удобное небольшое действие позволяет нам создавать дополнительные столбцы в списке сообщений на странице администратора «Все сообщения».
Показать количество вложений каждого сообщения в столбце
Представьте, что вам нужно увидеть, сколько файлов вы прикрепили к каждому из ваших сообщений, потому что, скажем, вы хотите еще раз проверить, что вы прикрепили 10 изображений галереи для каждого вашего сообщения. Вместо того чтобы считать их по одному в библиотеке мультимедиа, вы можете добавить дополнительный столбец к списку на странице «Все сообщения», например:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php
add_filter( ‘manage_posts_columns’, ‘manage_posts_columns_example’, 5 );
add_action( ‘manage_posts_custom_column’, ‘manage_posts_custom_column_example’, 5, 2 );
function manage_posts_columns_example( $columns ) {
$columns[‘post_attachments’] = __( ‘Attached’, ‘theme-name’ );
return $columns;
}
function manage_posts_custom_column_example( $column_name, $post_id ) {
if( ‘post_attachments’ == $column_name ) {
$attachments = get_children( array( ‘post_parent’ => $post_id ) );
$count = count( $attachments );
if( $count != 0 ) {
echo $count;
}
}
}
// Example Source: http://wpsnipp.com/index.php/functions-php/display-post-attachment-count-in-admin-column/
?>
|
Конечно, это пример очень специфического сценария. Но помните, что вы видели это на Tuts + Code — вы никогда не знаете, когда вам это понадобится!
Работа с <head>
страниц администратора
Время от времени нам может понадобиться добавить что-то в <head>
страницы нашей панели администрирования. И действие admin_head
делает именно это!
Отображение другого Favicon в конце
Этот простой и быстрый пример демонстрирует, как легко ввести необходимый HTML-код для «favicon» в <head>
панели администратора:
01
02
03
04
05
06
07
08
09
10
11
|
<?php
add_action( ‘admin_head’, ‘admin_head_example’ );
function admin_head_example() {
echo ‘<link rel=»shortcut icon» type=»image/x-icon» href=»‘ . get_bloginfo(‘template_directory’) . ‘/images/admin-favicon.ico» />’;
}
// Example Source: http://wpdevsnippets.com/wp-admin-custom-favicon/
?>
|
Поместите файл admin-favicon.ico
папку /images/
в вашей теме, и все готово!
Внедрение кода в wp_footer()
Это действие вызывается, когда wp_footer()
функция с тем же wp_footer()
. Вы можете использовать его для настройки вывода функции.
Отображение быстрого отчета о производительности для администраторов
Хотите увидеть быстрый отчет о том, сколько запросов выполняется на ваших страницах и сколько памяти они используют? Эти кусочки кода помогут вам в этом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<?php
add_action( ‘wp_footer’, ‘wp_footer_example’ );
function wp_footer_example() {
$stat = sprintf( ‘%d queries in %.3f seconds, using %.2fMB memory’,
get_num_queries(),
timer_stop( 0, 3 ),
memory_get_peak_usage() / 1024 / 1024
);
if( current_user_can( ‘manage_options’ ) ) {
echo «<!— {$stat} —>»;
}
}
// Example Source: http://wordpress.stackexchange.com/a/1866
?>
|
Теперь вы увидите закомментированную информацию о ваших запросах в исходном коде ваших веб-страниц. Не волнуйтесь: не администраторы этого не увидят.
Обработка постановки сценариев веб-интерфейса
Это одно из основных необходимых действий, если вы работаете с темами: действие wp_enqueue_scripts
управляет процессом постановки сценариев и стилей в интерфейс.
Правильное использование функции wp_enqueue_script()
Есть много способов поставить сценарии и стили в интерфейс, но есть только один правильный способ сделать это:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php
add_action( ‘wp_enqueue_scripts’, ‘wp_enqueue_scripts_example’ );
function wp_enqueue_scripts_example() {
// you can enqueue scripts…
wp_enqueue_script( ‘my-script’, get_stylesheet_directory_uri() . ‘/scripts/my-script.js’ );
// …and styles, too!
wp_enqueue_style( ‘my-style’, get_stylesheet_directory_uri() . ‘/styles/my-style.css’ );
}
?>
|
Создание уведомлений администратора страницы
Действие admin_notices
отвечает за все предупреждения, ошибки или другие сообщения, отображаемые в заголовке страниц администратора. Вы также можете использовать его для отображения своих собственных сообщений.
Предупреждение вошедших в систему пользователей о поддержке сайта
Предположим, вы перемещаете серверы и вам нужно сообщить своим авторам о ситуации: они не должны ничего публиковать! Вы можете заблокировать всю админ-панель для не-администраторов, или вы можете отобразить простое предупреждающее сообщение, например:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?php
add_action( ‘admin_notices’, ‘admin_notices_example’ );
function admin_notices_example() {
echo ‘<div class=»error»>
<p>We are performing website maintenance.
</div>’;
}
// Example Source: http://wpsnippy.com/show-notification-message-wordpress-admin-pages/
?>
|
Мы использовали класс «error» здесь. Если вам нужна зеленая рамка (что больше похоже на сообщение об успехе), вы можете использовать «обновленный» класс.
Обработка инициализации виджетов
Виджеты WordPress — это отличная система, которая позволяет нам, разработчикам, создавать и редактировать части наших сайтов. А действие widgets_init
позволяет нам при необходимости изменять поведение виджетов.
Запретить загрузку виджетов WordPress по умолчанию
По какой-то причине вы можете вообще отключить использование виджетов WordPress по умолчанию. Если это так, фрагмент кода ниже поможет вам полностью удалить эти виджеты из вашей установки WordPress:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<?php
add_action( ‘widgets_init’, ‘widgets_init_example’ );
function widgets_init_example() {
unregister_widget( ‘WP_Widget_Pages’ );
unregister_widget( ‘WP_Widget_Calendar’ );
unregister_widget( ‘WP_Widget_Archives’ );
unregister_widget( ‘WP_Widget_Links’ );
unregister_widget( ‘WP_Widget_Meta’ );
unregister_widget( ‘WP_Widget_Search’ );
unregister_widget( ‘WP_Widget_Text’ );
unregister_widget( ‘WP_Widget_Categories’ );
unregister_widget( ‘WP_Widget_Recent_Posts’ );
unregister_widget( ‘WP_Widget_Recent_Comments’ );
unregister_widget( ‘WP_Widget_RSS’ );
unregister_widget( ‘WP_Widget_Tag_Cloud’ );
}
?>
|
Конечно, вы можете закомментировать или удалить строки, чтобы разрешить загрузку некоторых виджетов.
Удаление пользователей WordPress
Нужно делать вещи каждый раз, когда пользователь удаляется? Пользователь delete_user
: он срабатывает после удаления пользователя.
Отправка электронного письма бедному парню после удаления его аккаунта
Если у вас есть веб-сайт, который время от времени привлекает плохих людей, и вам нужно часто удалять пользователей, вы можете подумать о том, чтобы сообщить им, что их учетные записи удалены. Фрагмент кода ниже поможет вам:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?php
add_action( ‘delete_user’, ‘delete_user_example’ );
function delete_user_example( $user_id ) {
global $wpdb;
$user_obj = get_userdata( $user_id );
$email = $user_obj->user_email;
$headers = ‘From: ‘ .
$subject = ‘You are being deleted, brah’;
$message = ‘Your account at ‘ .
wp_mail( $email, $subject, $message, $headers );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/delete_user
?>
|
При желании вы можете заменить переменные $subject
и $message
более формальными сообщениями.
Подведение итогов на сегодня
Мы прошли 10 из 50 действий в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!
Я тоже хочу услышать ваши мысли. Что вы думаете об этих действиях? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!