Вставка любых данных в любое место внутри поста WordPress
Данная фича поможет удалить десяток лишних плагинов, которые занимаются вставкой в тело поста каких-либо простых данных с возможностью предварительной обработки. Скажем, вставить в любое место блок adsense. Или обновляющийся в реальном времени курс бакса. Или любое значение, хранящееся в БД WP или сторонней таблицы.
Бывает, надо воткнуть текущую дату прямо в середину текста. То есть, дату не на момент публикации поста, а текущую дату с точки зрения читателя. Или любую другую меняющуюся информацию или кусок JS кода без постобработки его движком. Или что-то, что нужно пересчитывать каждый раз при обновлении страницы, и это что-то должно находиться в теле поста. Или.. Ну, думаю, вы поняли. :)
Мы будем писать плагин! Он очень простой и не требует никаких знаний в создании плагинов для WP. Единственный его недостаток — отсутствие «морды» в админке WP, то есть, поставить такой каким-нибудь заказчикам будет не комильфо. Но для собственных нужд вариант отличный.
В папке /wp-content/plugins/ создаем файл с каким-нить уникальным именем, скажем, «insert-any-data-into-post.php». Вначале прописываем блок комментария, который WP будет впоследствии парсить для описания плагина в своей админке. Можно писать любые данные какие хочется, затем подключаем shortcode и пишем простую функцию. Весь код:
<?php /* Plugin Name: Insert Any Data Into Post Plugin URI: Description: Insert any data into any place of WP post Version: 1.0.0 Author: Andrey Author URI: http://www.leksus.info/ */ //ищет в теле поста тэг [ give_me_date ] - вот прямо так, с квадратными скобками, но без пробелов - и каждый раз, когда будет находить этот тэг, будет запускать функцию с названием "give_me_date_handler", результат выполнения которой выводить в то место, где нашла вышенаписанный тэг. add_shortcode( 'give_me_date', 'give_me_date_handler' ); //сама функция function give_me_date_handler () { return date('d.m.Y'); } ?>
Если вкратце, то это все. :) Внутри функции можно делать любые действия, получая и обрабатывая любые данные. В примере выше при написании в любом месте поста конструкции [give_me_date] будет выводиться текущая дата на момент просмотра посетителем этого поста.
А еще можно подавать на вход этой функции различные параметры. Скажем, код ниже расширяет нашу функцию и добавляет возможность отображать не только текущую дату, но и вчерашнюю/завтрашнюю, а также позволяет менять вид даты.
function give_me_date_handler ($atts) { //из массива атрибутов делаем разрешенные переменные и задаем значения по умолчанию, необязательно но удобно extract( shortcode_atts( array( 'type' => 'yesterday,today,tomorrow', 'format' => 'short,full' ), $atts ) ); //перебираем какая нам дата нужна switch($type) { case 'tomorrow': $time = strtotime("+1 day"); break; case 'yesterday': $time = strtotime("-1 day"); break; default: $time = time(); } //перебираем вид даты if ($format == 'short') $date = date('d.m.Y', $time); else $date = date('r', $time); return $date; }
Переменные для нашей функции задаются через тэг в посте таким вот образом:
[give_me_date type=’tomorrow’ format=’short’]
Результат написанного выше тэга: 15.09.2024
Скриншотик из админки редактирования поста:
Через функцию можно тянуть данные с БД и возвращать их, можно просто возвращать JS-код, обернув его в ob_start() и ob_end_clean() для удобства. Можно также создавать несколько шоткодов и соотвественно несколько функций, таким образом вместив в один файл/плагин все необходимые «вкрапления» для использования внутри тела публикации.
Вообщем, полезная штука!