WordPress: Добавление содержимого в каждый пост при помощи фильтров
Итак, мы уже умеем вносить нужные нам коррективы в тег head страниц WordPress, изменять заголовки станиц и устанавливать свой значок favicon, при формировании этих самых страниц. В этом рецепте мы сделаем плагин, который будет в конце каждого поста или страницы добавлять ссылку-иконку, которая позволит пользователям отправлять ссылку на текущую страницу по почте своим друзьям.
Этот функционал можно реализовать также путем использования filter хука WordPress, к которому мы привяжем нашу функцию, которая в свою очередь будет получать содержимое поста, и сможет внести в него необходимый код, перед тем как пост попадет на страницу.
Как это сделать...
- Перейдите в каталог плагинов WordPress: wp-content/plugins
- Создайте новую директорию для плагина под названием email-page-link
- Зайдите в директорию плагина и создайте php-файл: email-page-link.php
- Откройте ваш новый файл в редакторе кода и добавьте заголовок в верхней части файла плагина:
/* Plugin Name: Plugin Email Page Link Plugin URI: Description: Этот плагин добавляет Email ссылки в конец страницы. Version: 1.0 Author: Somebody Author URI: http://xxxxxx.xx/ License: GPLv2 */
- Иконку email сылки можно поискать здесь:iconarchive.com. Нам понадобится изображение 32х32 пикселя в PNG формате. Сохраните файл иконки в директории плагина: wp-content/plugins/email-page-link под именем mailicon.png
-
Добавьте следующую строку кода, которая зарегистрирует callback-функцию в filter хуке
the_content,
который инициализируется, когда WordPress будет подготавливать данные перед их размещением в посте или на странице:
add_filter( 'the_content', 'email_page_filter' );
- Далее пропишем реализацию callback-функции:
function email_page_filter ( $the_content ) { // Получаем путь к ресурсу-изображению иконки: $mail_icon_url = plugins_url( 'mailicon.png', __FILE__ ); $new_content = $the_content; $new_content .= "<a title='E-mail article link' href='mailto:someone @somewhere.com?subject=Check out this interesting article entitled "; // Получаем заголовок текущей страницы/поста: $new_content .= get_the_title(); $new_content .= "&body=Hi!%0A%0AI thought you would enjoy this article entitled "; $new_content .= get_the_title(); $new_content .= ".%0A%0A"; // Получаем постоянную ссылку текущей страницы/поста: $new_content .= get_permalink(); $new_content .= "%0A%0AEnjoy!'><img src='" . $mail_icon_url . "' />Отправить на email</a>"; return $new_content; }
- Сохраните и закройте файл плагина. Больше кода в нем не будет.
- Идем в админку нашего WordPress сайта, во вкладку Plugins.
- Находим наш плагин в списке и активируем его.
- Теперь перейдите на страницу вашего WordPress сайта и обновите её чтобы увидеть что в конце каждого поста или страницы появится иконка со ссылкой "отправить на email". Если теперь кликнуть на ссылку - должен инициироваться ваш email - клиент с функцией "написать письмо".
Как это работает...
Подобно предыдущему рецепту, этот WordPress плагин так же использует функцию add_filter для регистрации нашей callback-функции, которая будет вызвана WordPress - ом, когда он будет подготавливать контент перед тем как отобразить его на странице. Когда вызывается наша функция первое, что мы в ней делаем это создаем e-mail иконку со ссылкой. Функция модифицирует оригинальное содержимое поста, добавляя к нему HTML-код нашей иконки-ссылки.
Подобная техника может использоваться для создания блоков ссылок "Поделиться..." с необходимым JavaScript кодом для того что бы посетители могли делиться ссылками со своими друзьями в социальных сетях.
Как только функция возвращает обработанные данные при помощи инструкции return - WordPress передаст эти данные на вход следующей по очереди callback-функции фильтра (мы же помним, что callback-функции привязанные к одному и тому же фильтру выстраиваются в очередь согласно приоритету, указанному в функции add_filter третьим параметром), что бы та в свою очередь могла внести в него свои изменения и так пока данные не пройдут сквозь весь строй callback-функций фильтра. Что бы в итоге представиться пользователю.
В этом рецепте нами использовались помимо прочего еще парочка полезных утилитарных функций WordPress. Хотя они используются в основном при работе с шаблонами, они могут также использоваться плагинами, чтобы мы могли получить доступ к информации об элементах, содержимое которых обрабатываются в текущий момент:
- get_the_title(): Получить заголовок поста/страницы
- get_permalink(): Получить постоянную ссылку на пост/страницу (URL-адрес всегда связан с постом или страницей, даже если, он больше не показывается на на главной странице веб-сайта)
Предыдущие статьи этого цикла: