Данная фича поможет удалить десяток лишних плагинов, которые занимаются вставкой в тело поста каких-либо простых данных с возможностью предварительной обработки. Скажем, вставить в любое место блок 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’]

Результат написанного выше тэга: 29.03.2024

Скриншотик из админки редактирования поста:
add_shortcode

Через функцию можно тянуть данные с БД и возвращать их, можно просто возвращать JS-код, обернув его в ob_start() и ob_end_clean() для удобства. Можно также создавать несколько шоткодов и соотвественно несколько функций, таким образом вместив в один файл/плагин все необходимые «вкрапления» для использования внутри тела публикации.

Вообщем, полезная штука!