Шорткод вывода любого поста на любой странице

Понадобилось мне однажды выводить содержимое нескольких разных постов в содержимом специальной страницы. Казалось бы, нет ничего проще – скопировал и вставил. Однако если нужно будет со временем изменять посты, из которых брать содержимое, то копипаст содержимого этих постов – не самый оптимальный путь. В итоге я пришел к решению сделать специальный шорткод.

Этот шорткод можно вставлять в содержимое любой страницы, и в результате его работы будет выводиться содержимое указанного поста. Тоже хотите такой шорткод? Тогда откройте файл файл functions.php и добавьте в него следующий код:

function tr_post_include($atts) {
	$thepostid = intval($atts[id]);
	$output = '';
	query_posts("p=$thepostid");
	if (have_posts()) : while (have_posts()) : the_post();
		$output .= get_the_content($post->ID);
	endwhile; else:
		// ничего не выводит
	endif;
	wp_reset_query();

	return $output;
}
add_shortcode("pst_inc", "tr_post_include");

Пример использования шорткода:

[pst_inc id="XX"]

XX – это ID поста. Довольно простой шорткод: просто указываете ID поста, и его содержимое выводится в нужном месте страницы. Если вы ничего не укажете или укажете несуществующий ID, то шорткод просто ничего не выведет. Шорткод удобен тем, что с его помощью можно обойтись без создания специального шаблона для такой страницы.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

8 Комментарии

    • Если использовать кэширование, то ничего с блогом не случится. Один раз сделает дикое количество запросов, а потом будет обходиться без них.

  1. Все получилось!!! Огромное спасибо, но на странице выводит один пост, ка же сделать чтоб выводились все посты из какой то одной(или нескольких) категорий?

  2. Супер – то что искал, даже спросил на форуме вордпреса, но может быть вы подскажете тогда такой момент: а если выводить не одну запись – а несколько, списком.
    Я себе тут нарисовал задачу – у меня есть главная страница. которая разделена на несколько колонок. В одной у меня общая инфа про компанию, а в правой есть есть новости которые пишем руками и бла бла бла. Я хочу сделать рубрику Новости и выводить только содержимое записей, без заголовка но с датой. Выводить хочется всего 3 записи и сделать ссылку еще чтобы открывалась рубрика со всеми новостями.

    Каждый раз прописывать ручками номер новости – уже легче задача, но хочется не заморачиваясь – постить короткие новости.

    Рубрику “Новости” и ее содержимое закрыть от индексации чтобы роботы не сканировали короткие записи

    • Вы хотите выводить с помощью шорткода несколько последних постов из определенной категории? Тогда удобнее смастерить другой шорткод. Например, такой:

      add_shortcode( 'tp-cats', 'tp_cats_function' );
      function tp_cats_function($atts){
      	if( empty($atts['id']) ) return;
      	$per_page = !empty($atts['count']) ? (int)$atts['count'] : 3;
      	if( $per_page < 1 ) $per_page = 3;
      
      	$cats_id = explode(',', $atts['id']);
      	
      	$get_posts = new WP_Query(
      		array(
      			'category__in' => $cats_id,
      			'posts_per_page' => $per_page
      		)
      	);
      
      	$content = '';
      
      	if( $get_posts->have_posts() ){
      		$content .= '
      '; while( $get_posts->have_posts() ){ $get_posts->the_post(); $content .= '

      ' . get_the_title() . '

      '; } $content .= '
      '; } return $content; }

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

      [tp-cats id="23,45" count="3"]

      id – это ID категорий, из которых нужно выводить посты
      count – количество последних постов

      • Спасибо за код, мне еще рекомендовали mini-loop модуль – пока я с ним проколупался и вставил ваш код вы сделали то что нужно – спасибо – я сейчас исправлю код. Все работает как часики – заключил в span и выводится все красиво

  3. Доброго времени суток подскажите пожалуйста. А как добавить шорткод для собственного типа постов? Например: нашол я в интернете как регистрировать – зарегистрировал
    register_post_type(‘gadgets’,
    array(
    ‘labels’ => array(
    ‘name’ => __(‘Gadgets’),
    ‘singular_name’ => __(‘Gadget’),
    //остальные переводы
    ),
    ‘public’ => true,
    ‘publicly_queryable’ => true,
    ‘query_var’ => true,
    ‘taxonomies’ => array(‘category’,’post_tag’),
    ‘supports’ => array(‘title’,’editor’,’author’,’thumbnail’,’excerpt’,’comments’),
    ‘rewrite’ => array(‘slug’ => ‘gadgets’),
    //другие настройки
    )
    );
    но шорткод их не выводит(((
    Благодарю!

    • Переписал… Вопрос снят…добавил в начало кода данные
      $args = array(
      ‘post_type’ => ‘gadgets’,
      ………

      ещё раз благодарю… отличный шорт код…..

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

Ваш электронный адрес не будет опубликован.


*