Архив рубрики: WordPress

Усиление защиты от брутфорса

Мы добавили новую логику, для предотвращения брутфорс атак. Сервис будет проверять попытки входа один раз в час, и если некоторые из IP-адресов имеют 10 и больше попыток входа в систему, то эти IP-адреса будут блокированы в течение следующих 24 часов.

Это делает брутфорс защиту жестче и ресурсы сервера не будут тратиться на эти IP-адреса.

Скачать Security & Firewall от CleanTalk .

Новые возможности управления спам комментариями для WordPress

Для WordPress пользователей сервиса, появилась возможность управлять спам комментариями.
По умолчанию, все спам комментарии помещаются в папку спам, сейчас вы можете изменить действия плагина со спам комментариями:

1. Перемещать в папку Spam. Все спам-комментарии будут отправлены в папку «Spam» в разделе Комментарии в административной части WordPress, кроме комментариев со Стоп-Словами. Комментарии, содержащие Стоп-Слова, всегда будут отправляться на модерацию.
Что бы предотвратить разрастание папки спам, ее можно очищать автоматически, с использованием опции «Хранить спам комментарии 15 дней». Включается эта опция в настройках плагина WP Dashboard-Settings-Anti-Spam by CleanTalk->

2. Перемещать в корзину. Все спам-комментарии будут отправлены в папку «Trash» в разделе Комментарии в административной части WordPress, кроме комментариев со Стоп-Словами. Комментарии, содержащие Стоп-Слова, всегда будут отправляться на модерацию.

3. Банить комментарий без перемещения в бэкенд WordPress. Все спам-комментарии будут удаляться навсегда без следов в административной части WordPress, кроме комментариев со Стоп-Словами. Комментарии, содержащие Стоп-Слова, всегда будут отправляться на модерацию. Все заблокированные и удалённые комментарии можно найти в Антиспам Журнале.

Для управления действиями со спам комментариями, перейдите в Панель управления, выберите сайт, для которого необходимо внести изменения и перейдите в меню «Настройки» под именем сайта. На странице настроек сайта, выберите из пункта «Действие для SPAM-комментариев:» необходимые настройки и в низу страницы нажмите кнопку «Сохранить».

Новая версия Security Service by CleanTalk

Как мы уже сообщали, CleanTalk запустил проект для обеспечения безопасности web сайтов. Сервис обеспечивает брутфорс защиту административной части WordPress и логирует действия пользователей.

С 29 ноября Security by CleanTalk становится облачным сервисом и основные данные теперь будут доступны в Панели управления сервисом. Стоимость сервиса составляет $20 за год обслуживания для одного сайта.

Переход на хранение данных в облаке позволяет предоставлять больше данных и более гибко использовать информацию за счет различных фильтров в Панели управления.

В первоначальном решении, данные хранились в базе данных сайта, и большой объем данных и операции с ними могут повлиять на скорость работы сайта, а это в свою очередь может серьезно повлиять на ранжирование в поисковой выдаче. Хранение данных в облаке является более безопасным, чем в базе данных сайта. Если злоумышленник сможет получить доступ к сайту, то сможет удалить все данные по которым можно отследить его действия и быстро найти внесенные изменения и исправить их.

При работе с облаком сервис позволить хранить все данные за последние 45 дней, что позволяет хранить историю действий пользователей, данных о брутфорс атаках и успешных авторизаций и в случае необходимости узнать, кем и какие действия были произведены.

Что такое AMP (Accelerated Mobile Pages)? Как настроить CleanTalk для AMP

Что это?73rcbap

Ускоренные Мобильные Страницы — это способ создания веб-страниц статичного содержания с практически мгновенной загрузкой для мобильных устройств. Он состоит из трёх частей:

  1. AMP HTML — это HTML с ограничениями для надёжной производительности и расширениями для обогащения содержимого страниц.
  2. AMP JS — это библиотека, гарантирующая быстрое отображение страниц. Сторонние JavaScript запрещены.
  3. Google AMP Cache — это сеть на основе прокси для выдачи достоверных страниц на AMP HTML. Выборка, кэширование и улучшение производительности происходят автоматически.

Преимущества

  • Облегчённые версии стандартных веб-страниц с высокой скоростью загрузки.
  • Мгновенная подгрузка мультимедиа содержимого: видеоролики, анимация, графика.
  • Одинаковое кодирование — на разных устройствах будет одинаковое содержимое сайта с быстрой загрузкой.
  • Проект AMP открыт, что способствует свободному обмену информацией.
  • Возможное преимущество в SEO, так как скорость загрузки является одним из факторов ранжирования.
  • Наличие плагинов для популярных CMS, что облегчает внедрение AMP на сайте.

ywhw5gf

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

При выборе AMP-плагина учитывайте следующее:

— Интеграция с плагином SEO для прикрепления соответствующих метаданных.

— Сбора аналитики с отслеживанием трафика AMP-версий страниц.

— Показ AMP-рекламы, если вы издатель.

Плагины, доступные в каталоге WordPress:

  1. AMP от Automattic
  2. Facebook Instant Articles & Google AMP Pages от PageFrog
  3. AMP — Accelerated Mobile Pages
  4. AMP Supremacy
  5. Custom AMP (требует установку AMP от Automattic)

Для примера установим и активируем AMP от Automattic, затем создадим новый пост с медиа-содержимым. Обратите внимание, что не страницу, а пост. Пока для WordPress-страниц автоматическое создание AMP-версии не предусмотрено.

Плагин AMP от Automattic автоматически конвертирует пост в ускоренную версию поста, при этом ничего дублировать самому не нужно. Достаточно просто дописать /amp/ (или ?amp=1) в конец ссылки:

http://demo1.cleantalk.org/wordpress/2016/09/02/amp-post/amp/

Сравним скорости загрузки постов на стационарном компьютере:

До установки AMP

d4mrvfx

 

После установки AMP

qojk4u9

По графикам и по итоговому времени загрузки сразу видно разницу.

Как настроить CleanTalk для AMP

Пожалуйста, убедитесь, что опция “Использовать AJAX для проверки JavaScript” выключена, потому что она будет препятствовать нормальному выполнению JavaScript.

Она находится здесь:

Панель Администратора WordPress —> Настройки —> CleanTalk —> Продвинутые настройки —> отключить “Использовать AJAX для проверки JavaScript” —> Сохранить изменения.

Остальные опции не будут препятствовать функционированию AMP-версии поста. Антиспам плагин от CleanTalk будет защищать все поля отправки данных, которые отобразились после преобразования.

На данный момент большинство AMP-плагинов убирает возможность комментирования и отправки контактных данных на ускоренных страницах.

Валидация от Google

Теперь нужно проверить структурированные данные с помощью инструмента “Валидатор от Google”:

https://search.google.com/structured-data/testing-tool/

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

Копируем и вставляем ссылку на AMP-версию поста и смотрим результат. Исправляем те ошибки, на которые нам укажут.

После этого Ваша AMP-версия поста будет готова.

Ссылки

Проект AMP:
https://www.ampproject.org/

Блог AMP:
https://amphtml.wordpress.com/

AMP-плагины в каталоге WordPress:
https://wordpress.org/plugins/search.php?q=AMP

Рекомендации от Google по созданию ускоренных мобильных страниц:
https://support.google.com/webmasters/answer/6340290?hl=ru

Как снизить вероятность брутфорс атак на WordPress

До момента, когда CleanTalk запустил security плагин я не обращал особого внимания на безопасность аккаунта администратора WordPress и полагался лишь на сложность пароля.

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

Поэтому рассмотрим только защиту аккаунта администратора.

Когда security плагин был запущен и возникла потребность тестировать, я начал получать отчеты о работе плагина, в которых указывается статистика неудачных попыток входа в аккаунт администратора WordPress. И за каждые сутки таких попыток было от 4 до 25, с разных IP адресов. Т.е. это были попытки подбора пароля ботами.

daily-security-report-2

На что я обратил внимание:

  1. Боты знали мой логин и подбирали пароль именно к нему.
  2. Я не использую стандартный логин Admin, а несколько изменил его.
  3. В блоге существуют и другие аккаунты администратора, но попыток их взлома за несколько дней наблюдений не происходило.

Задавшись вопросом, как боты узнали мой аккаунт и почему не пытались взломать другие аккаунты администратора? Все достаточно просто, под своим аккаунтом я размещаю посты и пишу комментарии, а другие аккаунты сделаны для наших сотрудников, хостера и других людей которые делали действия только в панели управления веб сайтом.

Исходя из этого, я понял что боты узнают логины через парсинг страниц сайта. Многие публикуют посты и комментарии из аккаунта администратора.

Например, вы публикуете пост в блоге, то ссылка на автора будет примерно такого вида http://example.com/author/admin***/. Боты просмотрев код вашего сайта ищут записи такого вида на всех страницах сайта и собирают из ссылок все аккаунты.

post

Тоже самое произойдет если вы напишите комментарий из аккаунта администратора, только ссылка будет немного другого вида http://example.com/members/admin***/

comment

Даже если вы один раз опубликовали пост или комментарий из аккаунта администратора, то боты его найдут и будут пытаться его взломать.

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

Что сделать для того что бы минимизировать вероятность взлома аккаунта администратора веб сайта.

  1. Не публиковать статьи и комментарии из аккаунта администратора.
  2. Создать каждому администратору аккаунт с другой ролью, например Author или Editor. Все зависит от ваших потребностей.
  3. Сменить текущего пользователя администратора. Внимание! Перед этим необходимо сделать резервную копию сайта и баз данных. Я не могу рекомендовать это, и если вы делаете это, то на свой риск, так как это может привести к нежелательным последствиям.

Потребуется создать нового пользователя с правами администратора и пользователя с другой ролью, например Author. Войти в панель управления сайтом с новым аккаунтом и проверить возможности Администратора управлять сайтом, настройками и пользователями.

Зайти в раздел «Пользователи» и удалить предыдущий аккаунт администратора, при этом WordPress вас спросит, на кого переназначить статьи и комментарии, здесь вам пригодится созданный заранее пользователь Author. На него переназначаете статьи и в дальнейшем используете для публикации постов и комментариев.

Эти действия можно сделать и для других аккаунтов администраторов. Но для большинства пользователей WordPress, будет достаточно установить один из плагинов защиты от брутфорс атак, например плагин Security & Firewall от CleanTalk.

Как защитить WordPress сайт от спама и спам ботов.

Существует много плагинов для защиты от спама, почти все они имеют свои некоторые минусы. По нашему мнению оптимальным является использование облачного сервиса CleanTalk.

Так как это облачный сервис, за счет получения и анализа данных с более 100 000 веб сайтов, CleanTalk очень эффективно защищает от спама. Алгоритмы анализа поведения спам ботов увеличивают эффективность  сервиса до 99,998%. Это один из самых быстрых анти спам плагинов и не нагружает сервер и базу данных.

Что бы начать использовать CleanTalk на вашем WordPress сайте, выполните следующие действия:

Перейдите в WordPress панель управления->Plugins->Add New и в строке поиска введите CleanTalk и нажмите Install.

install CleanTalk

 

Активируйте плагин и перейдите в настройки CleanTalk.

Для подключения плагина к сервису, вам потребуется API ключ. Для получения ключа нажмите на кнопку «Get access key».

Get key

 

Вы перейдете на сайт CleanTalk. Вы можете сменить ваш емайл для регистрации в сервисе.

Register for an account

Нажимаем на на кнопку и получаем свой access key.

 

CleanTalk anti spam setup on WordPress

Возвращаемся в настройки плагина, вставляем access key и нажимаем «Save Changes». На этом установка и настройка плагина завершены, изменения в Advanced Settings нужны в редких случаях.

Для проверки работы плагина выйдите из аккаунта администратора и перейдите на ваш сайт. Напишите тестовый комментарий или сделайте тестовую регистрацию с емайлом , эти сообщения будут заблокированы.

test message

Далее вы должны получить сообщение о блокировке

forbidden

 

Отлично, ваш сайт защищен от спам ботов!

Точно так же вы можете проверить любую форму на вашем сайте.

 

Дополнительные возможности CleanTalk. Панель управления, просмотр логов.

 

Для просмотра логов сервиса, перейдите в CleanTalk Dashboard. Или войдите в ваш WordPress Dashboard->Settings-CleanTalk и нажмите кнопку «Click here to get anti-spam statistics»

get stat

 

Если у вас возникли вопросы, вы всегда можете к нам обратиться Мы будем рады вам помочь.

Больше информации

Help

Features

Проверка существующих комментариев на спам для WordPress

Мы рады представить новую версию анти спам плагина CleanTalk для WordPress.

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

При установке плагина, у пользователя на сайте уже есть комментарии, часть из которых была оставлена спам ботами из за несовершенства  предыдущего анти спам плагина или его отсутствия. Проверять вручную все комментарии долго и утомительно, зачастую их может быть тысячи и проверить их нет возможности. Многие спам комментарии очень сложно отличить — спам это или нет.

Теперь найти спам комментарии и удалить их можно очень просто и быстро. Установите последнюю версию анти спам плагина CleanTalk. Войдите в панель управления сайтом, в меню «Комментарии» и нажмите кнопку «Найти спам в комментариях».

50 действий (actions) WordPress — 50 примеров (с 1-го по 10-е)

Первой частью нашей серии было вступление в мир действий (actions) WordPress. В этой статье мы начнём обзор 50 выбранных действий, объясняя, для чего они нужны, и приводя пример на каждое.
Итак, вот первая партия 50 наших действий !

Обработка инициализации WordPress

Вкратце, это действие совершается после того, как готово всё, кроме заголовков. Вероятно, поэтому это самое популярное действие WordPress всех времён – вы можете привязать к нему почти всё.

Изменение нескольких правил подстановки URL по умолчанию

Как турецкий пользователь WordPress, я посчитал лишним и неприятным то, что WordPress не позволяет изменить базы URL для авторских страниц, результатов поиска или пронумерованных страниц в панели администратора.
Код, расположенный ниже, помогает мне с этой проблемой:

<?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';
}

?>

Здорово, да? (Конечно, я заменил турецкие слова на ‘profile’, ‘find’ и ‘p’, чтобы было понятнее.)

Отправка HTTP заголовков

Здесь не нужно вступления, потому что название говорит само за себя: это небольшое действие помогает нам настроить HTTP заголовки для отправки!

Указать Internet Explorer-у использовать самый последний движок рендеринга

Мета-тег X-UA-Compatible заставляет Internet Explorer использовать указанный движок рендеринга для веб-страницы. Если вы установите его в "edge", Internet Explorer будет использовать самый последний из них; однако при этом не проходит HTML валидация при использовании фрейма в Google Chrome.
К счастью, использование <meta> тега для нас не ограничено: мы также можем использовать заголовки HTTP. А действие send_headers замечательно подходит для этого:

<?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.

Сброс правил перезаписи после переключения темы

Скажем просто: как сбросить переписанные правила после переключения на новую тему, потому что у новой темы другие кастомные типы постов?
Вот, нужно использовать этот код:

<?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 и не смог понять причины — если у вас есть ответ, поделитесь им в комментарии.

Добавление кастомных столбцов в список постов

Это небольшое действие позволяет создавать дополнительные столбцы в списке постов «All Posts» на странице администратора.

Отображать прикрепление каждого поста, посчитанного в столбце

Представьте, что вам нужно увидеть, сколько файлов вы прикрепили, потому что, например, вам нужно проверить, что вы прикрепили 10 картинок к каждому посту. Вместо того, чтобы считать их в Media Library, можно добавить ещё один столбец в список на странице «All Posts» вот так:

<?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 в Back End

Этот простой и быстрый пример объясняет, как с лёгкостью добавить нужный HTML код к «favicon» в заголовок <head> вашей панели администратора:

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

Отображение быстрого отчёта о работе для администраторов

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

<?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

?>

Теперь вы увидите прокомментированную информацию о ваших запросах в исходном коде ваших веб-страниц. Не волнуйтесь: этого не увидит никто, кроме администраторов.

Управление постановкой Frontend-скриптов в очередь

Это одно из действий, которые нужно знать, если вы работаете с темами: действие wp_enqueue_scripts управляет процессом постановки скриптов и стилей в front-end.

Правильное использование функции wp_enqueue_script()

Есть много способов постановки скриптов и стилей в front-end, но правилен только один из них:

<?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 отвечает за все предупреждения, ошибки или другие сообщения, отображаемые в заголовках страниц администраторов. Вы можете также использовать его, чтобы отображать ваши собственные сообщения.


Предупреждение зарегистрированных пользователей об Обслуживании сайта


Предположим, что вы переносите сервера, и вам нужно предупредить об этом авторов: они не должны ничего постить. Вы можете заблокировать всю панель администрации тем, кто не входит в неё, или отобразить такое предупреждающее сообщение:

<?php

add_action( 'admin_notices', 'admin_notices_example' );

function admin_notices_example() {  
	echo '<div class="error">
			<p>We are performing website maintenance. Please don\'t make any changes in your posts until further notice!</p>
		  </div>';
}

// Example Source: http://wpsnippy.com/show-notification-message-wordpress-admin-pages/

?>

Мы использовали здесь класс «error». Если вы хотите зелёную рамку (которая больше подходит для успешных сообщений), используйте класс «updated».

Управление инициализацией виджетов

Виджеты WordPress – отличная система, позволяющая нам, разработчикам, создавать и редактировать части сайтов. И действие widgets_init позволяет модифицировать поведение виджетов, если это нужно.

Предотвратить загрузку виджетовWordPress по умолчанию

По какой-либо причине вы можете захотеть остановить использование виджетов WordPress в целом. В таком случае этот код поможет вам полностью удалить эти виджеты из настроек WordPress:

<?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 для вас: оно запускается после удаления пользователя.

Написать бедняге после удаления его аккаунта

Если ваш сайт случайно привлёк плохих людей и вам нужно часто удалять пользователей, вы можете захотеть дать им знать, что их аккаунты удалены. Этот код вам поможет.

<?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: ' . get_bloginfo( 'name' ) . ' <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n";
	$subject = 'You are being deleted, brah';
	$message = 'Your account at ' . get_bloginfo( 'name' ) . ' has been deleted because of your totally uncool behaviors.';
	wp_mail( $email, $subject, $message, $headers );
}

// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/delete_user

?>

При желании вы можете заменить $subject и $message более формальными сообщениями.

Подводя итог

В этой статье мы узнали о 10 действиях из 50. Надеюсь, вам понравилось, и вы узнали отсюда что-нибудь новое. Увидимся в следующей статье!
Хотелось бы узнать и о ваших мыслях. Что вы думаете об этих действиях? Размещайте свои комментарии; а если вам понравилась статья, не забудьте ей поделиться!

Этот текст — перевод статьи Fifty Actions of WordPress – 50 Examples (1 to 10) ,выполненный Марией Знаевой.

50 действий (actions) в WordPress. Вступление

Причина, по которой WordPress – самая популярная CMS в мире, это, конечно, его гибкость. Такую возможность даёт WordPress простая структура «хуков». Без фильтрации хуков и хуков действий (actions), WordPress не был бы таким гибким, а также не имел бы столько тем и плагинов.

В этой серии постов мы рассмотрим один из двух видов хуков WordPress. Мы узнаем почти всё, что нужно знать о действии (actions):

  • В первой части, которой является эта статья, Мы узнаем, что такое действие в WordPress и как использовать действие  с семью основными функциями.
  • В следующих пяти частях мы увидим огромное количество примеров действий  в WordPress. В каждой части мы будем рассказывать о десяти действиях , отмечая их плюсы и приводя по одному примеру на каждое.
  • В конце серии мы повторим то, что изучили, и все 50 примеров действий.

Это будет невероятно долго. Крепитесь!

Что такое действие (action) в WordPress?

В Codex действие определяются так:

Действия вызываются специфическими событиями, которые происходят в WordPress, такими, как публикация поста, смена темы или отображение экрана администратора. Действия – это кастомная функция PHP, определённая в вашем плагине или теме и связанная с хуком, то есть настроенная так, чтобы реагировать на эти действия.

Итак, по существу, действия – это функции, вызываемые событием WordPress и происходящие до или после события. Действие – один из двух типов хуков в WordPress (другой тип хука – это фильтры, о которых мы говорили ранее; прочтите посты о фильтрах WordPress, если хотите узнать о них больше).

Использование действий в WordPress

Определение действия – самое лёгкое из того, что мы сделаем в этой серии постов. К счастью, научиться создавать и использовать действия почти легко. Посмотрим, как мы свяжем с хуком функции в действии, создаём новые действия, перемещаем существующие и другие функции, связанные с действием в ядре WordPress.

Связывание функции с хуком действие

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

<?php

add_action( $hook_name, $function_name, $priority, $arguments );

?>

Посмотрим, что означают эти параметры:

  • $hook_name – это название хука действия, который мы собираемся использовать
  • $function_name – название функции
  • $priority – целое, определяющее порядок использования функции в хуке действие
  • $arguments – число аргументов, которые использует наша функция и позволяет хук действие

Давайте посмотрим на пример:

<?php

add_action( 'add_meta_boxes', 'my_function', 10, 2 );

function my_function( $post_type, $post ) {
	// do stuff with $post_type and $post
}

?>

Даже слишком легко, верно?

Удаление функций из хука действие

Есть две функции, чтобы удалить функции из хука действие: remove_action() и remove_all_actions(). Посмотрим, как их использовать:

<?php

// remove_action( $hook_name, $function_name, $priority );
remove_action( 'login_enqueue_scripts', 'some_function', 10 );

// remove_all_actions( $hook_name, $priority
remove_all_actions( 'wp_enqueue_scripts', 10 );

?>

У функции remove_action() есть три параметра: имя хука, имя функции, которую мы собираемся удалить из hook, и приоритет, который был установлен во время использования add_action(). У функции remove_all_actions() нет параметра $function_name потому что она удаляет все функции, привязанные к действию.

Создание хука действие

Если вы разрабатываете плагины или темы WordPress, это хорошая практика, чтобы создать хуки в вашем коде, чтобы другие разработчики могли расширить ваш плагин или тему. Для этого также есть две функции: do_action() и do_action_ref_array(). Посмотрим, как работает первая:

<?php

do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );

/*
 * Usage:
 * 
 * add_action( hook_name, my_function )
 * 
 * function my_function( $arg1, $arg2 ) {
 *     // do stuff with $arg1, $arg2 and so on
 * }
 * 
 */

?>

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

<?php

$args = array( $arg1, $arg2, /* ... */ $argN );

do_action_ref_array( $hook_name, $args );

/*
 * Usage:
 * 
 * add_action( hook_name, my_function )
 * 
 * function my_function( $args ) {
 *     // do stuff with $args[0], $args[1] and so on
 * }
 * 
 */

?>

Получение числа вызовов действия

Если вам нужно будет узнать, сколько раз вызвано действие, вы можете воспользоваться этой функцией подсчёта вызова действия:

<?php

function tuts_foo() {
	$action_count = did_action( 'some_action_name' );
	if ( 1 === $action_count ) {
		// run code if 'some_action_name' has been fired only once
	}
}

?>

Как вы видите, единственный параметр этой функции – имя хука действия.

Проверка наличия связанных с действием функций

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

Чтобы это проверить, используйте функцию has_action(), чтобы удостовериться, что действие интересующего вас плагина доступно:

<?php

if( has_action( 'some_popular_plugin_action' ) {
	add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
} else {
	wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
	// CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
}

?>

Как и функция did_action(), функция has_action() имеет только один параметр: название хука действие.

Заключение

Сейчас мы узнали довольно много о создании и использовании действий. Мы можем продолжить наше путешествие по примерам действий длиной в пять глав. Мы рассмотрим только пятьдесят примеров, но если вы любознательны, то найдёте ещё сотни в ядре. Надеюсь, вам понравится эта серия настолько же, насколько мне в процессе её создания. Если вы думаете, что можете помочь мне с инструкциями, предлагая больше действий и запрашивая больше примеров, не стесняйтесь говорить мне об этом и делиться своими мыслями в комментариях. И если вам понравилось то, что вы прочли в этой серии, не забудьте поделиться статьями!
Увидимся в следующей статье!

Этот текст — перевод статьи Fifty Actions of WordPress – An Introduction , выполненный Марией Знаевой.

Как добавить Shema разметку в блог WordPress с несколькими авторами

Structured-Data

На прошлой неделе я опубликовал инструкцию по добавлению Schema разметки в тему WordPress, но она действительна только для блогов с одним автором. А как насчёт блога с несколькими авторами? Сегодня я научу вас добавлять schema разметку в блог WordPress с несколькими авторами.
Во-первых, авторы блогов и анонимные комментаторы вашего сайта должны зайти в их профиль Google+, затем «о себе», «ссылки» (profile -> about -> links) и добавить Contributor to, а затем добавить url вашего сайта в список участников.

Шаг первый – добавить настройки профиля Google+ каждого автора

Откройте functions.php вашей темы WordPress и добавьте этот код.

if( !function_exists( 'mp_custom_userfields' ) ):
//////////////////////////////////////////////////////////////////////////////
// add custom user field
/////////////////////////////////////////////////////////////////////////////
function mp_custom_userfields( $contactmethods ) {
// ADD CONTACT CUSTOM FIELDS
$contactmethods['user_twitter']     = 'Twitter URL';
$contactmethods['user_facebook']    = 'Facebook URL';
$contactmethods['user_googleplus']  = 'Google Plus URL';
$contactmethods['user_linkedin']    = 'Linkedin URL';
return $contactmethods;
}
add_filter('user_contactmethods','mp_custom_userfields',10,1);
endif;

Как вы видите, это добавит новую графу в профиль пользователя WordPress (wp-admin/profile.php)

google-plus-add-field
Теперь все авторы и участники вашего сайта смогут добавить их собственный URL профиля Google+.

Шаг второй. Добавление schema шаблона.

Создайте чистый файл php и назовите его schema.php, а в него добавьте этот код.

<!-- #start Article Schema Markup for WordPress with multi authors -->

<div style="width:10px;height:10px;position:absolute;left:-9999em" class="post-schema">

<?php
global $post;
$author_email = get_the_author_meta('user_email');
$author_displayname = get_the_author_meta('display_name');
$author_nickname = get_the_author_meta('nickname');
$author_firstname = get_the_author_meta('first_name');
$author_lastname = get_the_author_meta('last_name');
$author_url = get_the_author_meta('user_url');
$author_status = get_the_author_meta('user_level');
$author_description = get_the_author_meta('user_description');

// get the user roles
if($author_status=='0'):
$user_roles = 'Subsribers';
elseif($author_status=='1'):
$user_roles = 'Contributor';
elseif($author_status=='2'):
$user_roles = 'Author';
elseif($author_status=='7'):
$user_roles = 'Editor';
elseif($author_status=='10'):
$user_roles = 'Administrator';
endif;

// get user google+ profile
$author_googleplus_profile = get_the_author_meta('user_googleplus');

// get post thumbnail
$thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), "thumbnail" );
?>

<!-- Insert data:Article schema -->
<article itemscope="" itemtype="http://schema.org/Article">

<span class="entry-title" itemprop="name headline"><a itemprop="url" href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></span>


<!-- Insert data:Article:image schema -->
<?php if($thumbnail_src): ?>
<span itemprop="image"><?php echo $thumbnail_src[0]; ?></span>
<?php endif; ?>

<!-- Insert data:Article:Published schema -->
<time datetime="<?php the_time('Y-m-d') ?>" itemprop="datePublished"></time>
<time datetime="<?php the_modified_time('d F Y') ?>" class="entry-date updated"></time>

<!-- Insert data:Article:Author schema -->
<span class="vcard author"><span class="fn"><?php the_author(); ?></span></span>

<!-- Insert data:Article:ArticleSection schema -->
<?php
$categories = get_the_category();
$separator = ', ';
$output = '';
if($categories){
foreach($categories as $category) {
echo '<span style="display:none;" itemprop="articleSection">' . $category->cat_name . '</span>';
}
}
?>

<!-- Insert data:Article:Tag schema -->
<?php if( has_tag() ) { ?>
<span itemprop="keywords"><?php the_tags('', ','); ?></span>
<?php } ?>

<!-- Insert data:Article:Content schema -->
<?php if( !is_singular() ): ?>
<div itemprop="description"><?php the_excerpt(); ?></div>
<?php else: ?>
<div itemprop="articleBody"><?php the_content(); ?></div>
<?php endif; ?>


<!-- Insert data:Person schema -->
<span itemprop="author" itemscope="" itemtype="http://schema.org/Person">

<!-- Insert data:Person:Author schema -->
<span itemprop="name">
<a href="<?php echo $author_googleplus_profile; ?>?rel=author" itemprop="url">
<?php echo $author_displayname; ?></a>
</span>

<!-- Insert data:Person:others schema *optional -->
<span itemprop="givenName"><?php echo $author_firstname; ?></span>
<span itemprop="familyName"><?php echo $author_lastname; ?></span>
<span itemprop="email"><?php echo $author_email; ?></span>
<span itemprop="jobTitle"><?php echo $user_roles; ?></span>

<?php if($author_description): ?>
<span itemprop="knows"><?php echo stripcslashes($author_description); ?></span>
<?php endif; ?>

<span itemprop="brand"><?php echo bloginfo('name'); ?></span>

</span>
<!-- end data:Person schema -->


</article>

</div>

<!-- #end Article Schema Markup for WordPress with multi authors -->

Шаг третий. Добавление schema.php в post_loop()

Загрузите schema.php в корень вашей текущей темы (wp-content/themes/current-theme/).
Откройте любой файл с post_loop (index.php, home.php, archive.php or single.php) и добавьте этот код

<?php get_template_part('schema'); ?>

в post_loop() таким образом:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- your own existed loop code -->
<!-- add this below -->
<?php get_template_part('schema'); ?>
<?php endwhile; else: ?> <?php endif; ?>

Шаг четвёртый. Проверка результата

Если всё заполнено, проверьте результат с помощью Structured Data Testing Tool и проверьте отдельный url поста для каждого автора.
Если автор вашего сайта уже добавил url вашего сайта в Google+ profile -> about -> links -> Contributor to, всё должно быть в порядке.

Если нет, в результате проверки возникнет предупреждающее сообщение вроде

Authorship not verify with the www.domain.com. please verify…

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

На заметку

Появляется вопрос, нужно ли использовать профиль Google+ для rel=author? Ответ положителен, Google+ нужен для проверки автора и данных, чтобы schema могла работать, но, с другой стороны, вот англоязычная статья о том, что проверка не нужна, которую вы можете найти интересной и опробовать.

Эта статья — перевод статьи How to add Schema Markup for WordPress Blog with Multi Authors , выполненный Марией Знаевой.