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

Шорткод, с помощью которого можно вывести содержимое любого поста на странице. С его помощью можно выводить содержимое нескольких постов на одной странице, не редактируя шаблон страницы.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

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

Этот шорткод можно вставлять в содержимое любой страницы, и в результате его работы будет выводиться содержимое указанного поста. Тоже хотите такой шорткод? Тогда откройте файл файл 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, то шорткод просто ничего не выведет. Шорткод удобен тем, что с его помощью можно обойтись без создания специального шаблона для такой страницы.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Otshelnik-fm

    если вставить 100 шорткодов на страницу — блог упадет от такого количества запросов?

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

      Ответить
  2. 007cifer

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

    Ответить
  3. Дмитрий

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

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

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

    Ответить
    1. tiaurus автор

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

      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 .= '<div class="cat_posts">';
      		while( $get_posts->have_posts() ){
      			$get_posts->the_post();
      			$content .= '<p>' . get_the_title() . '</p>';
      		}
      		$content .= '</div>';
      	}
      
      	return $content;
      }
      

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

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

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

      Ответить
      1. Дмитрий

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

        Ответить
  4. Владимир

    Доброго времени суток подскажите пожалуйста. А как добавить шорткод для собственного типа постов? Например: нашол я в интернете как регистрировать — зарегистрировал
    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’),
    //другие настройки
    )
    );
    но шорткод их не выводит(((
    Благодарю!

    Ответить
    1. Владимир

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

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

      Ответить
  5. Павел

    Добрый день, а как вывести по id не весь пост, а лишь определённый кусок? Например есть в записи таблица с ценами и её нужно по id вывести на другой странице.

    Ответить
  6. Александр

    Warning: Use of undefined constant id — assumed ‘id’ (this will throw an Error in a future version of PHP) in /home/c/ce85284/wordpress_145/public_html/wp-content/themes/generatepress/functions.php on line 440

    Ответить