Шорткоды, часть 2. Пишем свой шорткод для вордпресса

Shortcodes API вторая часть. Создание шорткодов.

Понравилась статья? Оставьте оценку:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(0 голосов, в среднем: 0 из 5)

В предыдущей статье мы разобрали что такое шорткод в вордпрессе. Сегодня попробуем сделать свой собственный, и использовать его на сайте. Не так давно я столкнулся с задачей вывода списка статей на странице поста. Что-то типа функционала «похожие посты». И, специально для этого, я создал свой простенький шортик.

Первым делом проинициализируем его в functions.php

function cs_related_display() {

	$args = array(
			'post_type' => 'post'
	);
	$q_posts = new WP_Query($args);
	ob_start();
	?>
		<ul class="related">
		<?php while ($q_posts->have_posts()) : $q_posts->the_post(); ?>
			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>
		</ul>
	<?php
	$output_string=ob_get_contents();
	ob_end_clean();

	return $output_string;
}

add_shortcode( 'cs_related', 'cs_related_display' );

Остается добавить в текст поста "[cs_related]" в квадратных скобках. Это выведет все посты в виде списка. Как это работает? С помощью add_shortcode() привязываем функцию к шорткоду. Во время отображения записи выполнится наша функция и выведет список.

Но теперь подумаем — а зачем нам выводить все записи? Бред конечно, я хочу отобразить в списке только пару тройку избранных ссылок. Для этого нужно добавить в шорткод параметры. Это делается так:


function cs_related_display($atts, $content = null, $tag) {
	$atts = array_change_key_case((array)$atts, CASE_LOWER);

	$related_atts = shortcode_atts([
			'ids' => ''
	], $atts, $tag);
	$q_ids = explode(',',$related_atts['ids']);

	$args = array(
			'post_type' => 'post',
			'post__in' => $q_ids
	);
	$q_posts = new WP_Query($args);
	ob_start();
	?>
		<div class="related-content">
			<?php echo $content;  ?>
		</div>
		<ul class="related">
		<?php while ($q_posts->have_posts()) : $q_posts->the_post(); ?>
			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>
		</ul>
	<?php
	$output_string=ob_get_contents();
	ob_end_clean();

	return $output_string;
}

add_shortcode( 'cs_related', 'cs_related_display' );

Таким нехитрым образом мы добавили $related_atts — атрибуты, а в них — параметр ids. Теперь можно через запятую указать id записей, которые нужны нам в списке: [cs_related ids="1,2,3"] Кстати, видите в параметрах функции появился $content, который мы затем вывели в блок перед списком? В него можно передать вложенный в shortcode текст. Примерно так [cs_related ids="1,2,3"] Текст внутри шорткода [/cs_related]

Пока это в общем-то все, что я хотел рассказать вам сегодня. Когда-нибудь позже я освещу тему вложенных шорткодов, то есть «шорткодов в шорткоде».

Оставить комментарий