Статьи

Пятьдесят действий WordPress — 50 примеров (от 1 до 10)

Предыдущая часть нашей серии была «введением» в мир действий WordPress. В этом уроке мы начнем рассмотрение 50 выбранных действий, объяснив, что они делают, и увидим пример для каждого действия.

Итак, без лишних слов, вот первая партия из наших 50 действий!

Короче говоря, это действие запускается сразу после того, как все готово, кроме заголовков. И именно поэтому это действие, вероятно, является самым популярным действием 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 для отправки!

Метатег 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> страницы нашей панели администрирования. И действие admin_head делает именно это!

Этот простой и быстрый пример демонстрирует, как легко ввести необходимый 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() . Вы можете использовать его для настройки вывода функции.

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

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 управляет процессом постановки сценариев и стилей в интерфейс.

Есть много способов поставить сценарии и стили в интерфейс, но есть только один правильный способ сделать это:

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:

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’ );
}
 
?>

Конечно, вы можете закомментировать или удалить строки, чтобы разрешить загрузку некоторых виджетов.

Нужно делать вещи каждый раз, когда пользователь удаляется? Пользователь 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 действий в этой статье. Надеюсь, вам понравилось и узнало что-то новое. Увидимся в следующем!

Я тоже хочу услышать ваши мысли. Что вы думаете об этих действиях? Оставьте свои комментарии ниже; и если вам понравилась статья, не забудьте поделиться ею!