WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

add_shortcode() WP 2.5

Добавляет новый шоткод и хук для него.

Для каждого шоткода может быть создана только одна функция обработчик. А значит, если другой плагин использует такой же шоткод, то ваша функция будет заменена на другую или наоборот (зависит от того в каком порядке подключаются функции).

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

Результат, который возвращает функция (обработчик шоткода) всегда должен возвращаться, а не выводиться на экран.

Шоткоды - это конструкция вида: [somename] или [somename id="123" size="medium"] или [somename]текст[/somename] в тексте, которые будут заменены другим текстом созданным функцией-хуком отвечающим за шоткод.

Видео о шорткодах в WordPress:

Хуков нет.

Возвращает

Ничего не возвращает.

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

add_shortcode( $tag , $func );
$tag(строка) (обязательный)

Название шоткода, который будет использоваться в тексте. Например: 'gallery'.

В названии нельзя использовать пробелы и нестандартные символы вроде: & / < > [ ] =.
По умолчанию: нет

$func(строка) (обязательный)

Название функции, которая должна сработать, если найден шоткод.

Функция получает 3 параметра, каждый из них может быть передан, а может нет:

  • $atts (массив)
    Ассоциативный массив атрибутов указанных в шорткоде.
    По умолчанию: '' (пустая строка - нет атрибутов)

  • $content (строка)
    Текст шорткода, когда используется закрывающая конструкция шорткода: [foo]текст шорткода[/foo]
    По умолчанию: ''

  • $tag (строка)
    Тег шорткода. Может пригодится для передачи в доп. функции. Пр: если шорткод - [foo], то тег будет - foo.
    По умолчанию: текущий тег

По умолчанию: нет

Примеры

#1. Пример регистрации шоткода [footag foo="bar"]:

function footag_func( $atts ){
	 return "foo = ". $atts['foo'];
}
add_shortcode('footag', 'footag_func');

// результат: 
// шоткод в тексте будет заменен на "foo = bar"

#1.2. Установка белого списка атрибутов шорткода

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

add_shortcode( 'bartag', 'bartag_func' );
function bartag_func( $atts ){
	// белый список параметров и значения по умолчанию
	$atts = shortcode_atts( array(
		'foo' => 'no foo',
		'baz' => 'default baz'
	), $atts );

	return "foo = {$atts['foo']}";
}

#2. Регистрация шорткода с контентом

Пример создания такого шоткода: [baztag]здесь текст[/baztag]:

add_shortcode( 'baztag', 'baztag_func' );
function baztag_func( $atts, $content ) {
	 return "content = $content";
}

// результат:
// конструкция шоткода будет заменена на "content = здесь текст"

#3. Регистрация шоткода для классов

Если ваш плагин написан классом:

add_shortcode( 'baztag', [ 'MyPlugin', 'baztag_func' ] );

class MyPlugin {
	 static function baztag_func( $atts, $content ) {
			return "content = $content";
	 }
}

#4 Вставка iframe через шорткод

Этот пример показывает как создать шорткод, чтобы потом через него вставлять iframe.

function Generate_iframe( $atts ) {
	$atts = shortcode_atts( array(
		'href'   => 'http://example.com',
		'height' => '550px',
		'width'  => '600px',     
	), $atts );

	return '<iframe src="'. $atts['href'] .'" width="'. $atts['width'] .'" height="'. $atts['height'] .'"> <p>Your Browser does not support Iframes.</p></iframe>';
}
add_shortcode('iframe', 'Generate_iframe');
// использование: [iframe href="http://www.exmaple.com" height="480" width="640"]

#5 Вывод записи по ID через шорткод

Получим пост по ID, используя шорткод [testimonials id="272"] в файле темы functions.php.

add_shortcode( 'testimonials', 'testimonials_shortcode_handler' );

function testimonials_shortcode_handler( $atts ){

	global $post;

	$rg = (object) shortcode_atts( [
		'id' => null
	], $atts );

	if( ! $post = get_post( $rg->id ) )
		return '';

	$url = wp_get_attachment_url( get_post_thumbnail_id( $post->ID ) );

	$out = '
	<div class="testimonial">
		<div class="testimonial-img">
			<img src="'. $url .'" />
		</div>
		<div class="testimonial-content">

			<img src="' . esc_attr( $post->logo ) . '" alt="icon" />

			<p class="testimonial_desc">'. get_the_content() .'</p>

			<div class="author-details">
				<img src="' . esc_attr( $post->author_image ) .'" alt="image">
				<p>
					'. esc_html( $post->author_name ) .' 
					<span>'. esc_html( $post->author_designation ) .'</span>
				</p>
			</div>
		</div>
	</div>
	';

	wp_reset_postdata();

	return $out;
}

Список изменений

С версии 2.5.0 Введена.

Код add shortcode: wp-includes/shortcodes.php WP 5.2.2

<?php
function add_shortcode( $tag, $callback ) {
	global $shortcode_tags;

	if ( '' == trim( $tag ) ) {
		$message = __( 'Invalid shortcode name: Empty name given.' );
		_doing_it_wrong( __FUNCTION__, $message, '4.4.0' );
		return;
	}

	if ( 0 !== preg_match( '@[<>&/\[\]\x00-\x20=]@', $tag ) ) {
		/* translators: 1: shortcode name, 2: space separated list of reserved characters */
		$message = sprintf( __( 'Invalid shortcode name: %1$s. Do not use spaces or reserved characters: %2$s' ), $tag, '& / < > [ ] =' );
		_doing_it_wrong( __FUNCTION__, $message, '4.4.0' );
		return;
	}

	$shortcode_tags[ $tag ] = $callback;
}

Cвязанные функции

Из раздела: Шорткоды

Danya 50
Программист фрилансер. Кодингом на PHP занимаю с 2008 года.
Редакторы: Kama 7527
26 комментов
Полезные 5 Вопросы 1 Все
  • Галерея выдающая случайное количество картинок.
    Принимает все стандартные параметры + "min" минимальное количество картинок.

    [random_gallery ids="578,577,576,575,574,573,572,571,570,569,568,567,554,551,550,549,548,547" link="none" columns="1" size="medium" orderby="rand" min="3"]
    add_shortcode('random_gallery', 'random_gallery_shortcode');
    function random_gallery_shortcode( $atts ){
    
    	$ids_array  = explode(",", $atts['ids']);
    	$ids_array  = array_values($ids_array);
    	$min        = tag_escape($atts['min']);
    	$ids_array  = array_slice($ids_array, 0, rand($min, (count($ids_array))));
    
    	$ids        = implode(",", $ids_array);
    	$columns    = $atts['columns'];
    	$link       = $atts['link'];
    	$orderby    = $atts['orderby'];
    	$size       = $atts['size'];
    
    	echo do_shortcode('['
    			.'gallery ids="'. $ids .'" '
    			.'columns="'. $columns .'" '
    			.'link="'. $link .'" '
    			.'orderby="'. $orderby .'" '
    			.'size="'. $size .'"'
    		.']');
    }
    
    1
    Ответитьмесяц назад #
  • Alexandrov Yan23 cайт: codyshop.ru

    Если создавать шорткод по примеру 3, WP выдаёт нотис:
    "Non-static method MyPlugin::baztag() should not be called statically"

    Ответитьмесяц назад #
  • Всем доброго времени суток. Помогите сделать шорткод для вывода записи целиком. Тоесть чтобы можно было на странице поставить шорткод и там будет запись по id целиком. А если будет ещё и класс у обёртки то вообще агонь. Перелопатил кучу инфы и решения не нашёл, а у самого пока знаний не хватает. Спасибо.

    Ответить22 дня назад #
Здравствуйте, !     Войти . Зарегистрироваться