Вывести случайный пост через шорткод WordPress

Здравствуйте дорогой посетитель!

Этой небольшой заметкой я хочу открыть новую рубрику этого сайта, которая будет называться "Функции из жизни"

Я уже почти год занимаюсь различной разработкой на WordPress под заказ (грубо говоря, это фриланс в нише WordPress, но без использования фриланс-площадок). За это время, по примерным подсчетам, успешно завершил около 30-40 разнообразных проектов под заказ для разных людей, также приобрел некоторые интересные знакомства, нашел тех, кто занимается аналогичной деятельностью, записал массу интересных идей и некоторые из них успел реализовать. А еще отсидел около 17 000 (!) часов за компьютером, из которых ~70% времени писал код или отлаживал его.

А в процессе разработки под заказ регулярно приходиться решать различные интересные задачи, придумывать решения проблем и упрощать процессы, поэтому у меня накопилось довольно много "кусочков" кода, которые помогают решать различные задачи на WordPress, и которыми я с вами с удовольствием поделюсь.

Как вывести случайную запись (пост) в WordPress

В этой заметке, хочу опубликовать простую функцию, которую вам нужно вставить в самый конец файла с функциями вашей темы, но до закрывающих символов "?>", если они там есть.

Файл с функциями можно найти так: Админка - Внешний вид - Редактор - справа в списке - Функции темы (functions.php)

Вот код функции для вставки: (пояснения ниже, после кода)

function gb_rand_post()
{
	$posts = array( 54, 59, 61, 64 );
	$post = get_post( $posts[ mt_rand( 0, count( $posts ) - 1 ) ] );
	$result = '';

	if( !is_null( $post ) )
	{
		$result .= '<div class="gb_rand_post">';
		$result .= '';
		$result .= '<h4>' . $post->post_title . '</h4>';
		$result .= '<div>' . $post->post_content . '</div>';
		$result .= '</div>';
	}

	return $result;
}
add_shortcode('gb_random_post','gb_rand_post');

!Важно: В коде выше, в выделенной строке, вам нужно указать СВОИ номера записей или страниц.

Самый простой способ узнать номер (ID) записи или страницы на вашем сайте, это сделать вот так:

вывести случайную запись wordpress

Функция gb_rand_post, описанная выше, добавляет шорткод (от англ. shortcode - "короткий код") - [gb_random_post] в арсенал шорткодов вашего сайта. Это значит, что вы можете вставлять этот шорткод в страницы, записи, виджеты сайдбара (боковой колонки/колонок сайта) и даже в любые другие файлы-составляющие вашей темы, например header.php или footer.php.

На этом блоге уже есть заметки, которые помогут вам исправить ситуацию, если у вас не работают шорткоды в виджетах или если вы хотите вставить шорткод в какую-то часть шаблона, а он там не работает: Не работает шорткод в шаблоне.

Если у вас что-то не получается и вы долго над этим "паритесь", то, пожалуйста, не стесняйтесь, пишите ниже в комментариях, и я постараюсь вам помочь. Возможно, даже сделаю кое-что за вас и вас научу!

Успехов в освоении широт WordPress!

Богдан Григорук

[ Прочитайте комменты ниже или напишите свой... ]

Ищете хостинг для своего сайта? Могу порекомендовать свой (нажмите здесь)

9 комментариев к “Вывести случайный пост через шорткод WordPress”

  1. SEO Бич 15.09.2013 в 04:54 #

    Спасибо за решение. Как раз нужно реализовать подобную фичу. Буду пробовать.

    • Богдан 17.09.2013 в 15:19 #

      Пожалуйста. Обязательно напиши, о том, что у тебя получилось или не получилось 🙂

  2. Артур 16.12.2013 в 22:19 #

    Я ищу код, для вставки случайных комментариев в сайдбар.
    сейчас стоит это:
    [recenttesti num="6" thumb="false" except_count="3"]
    в шаблоне есть раздел отзывов, заполняемых в админке самой.
    Сейчас выводятся одни и теже, остальные простаивают.
    Может знаешь, куда копнуть?

    • Богдан 17.12.2013 в 08:24 #

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

      А вообще,это надо где-то в функциях темы (бывает functions.php или отдельно functions-shortcodes.php) искать функцию, которая и привязана к шорткоду [recenttesti ...], и затем уже ее редактировать.

  3. Виталий 22.02.2014 в 16:15 #

    Добрый день! Я как понимаю этот код выводит те записи, которые добавлены в функциях темы: $posts = array( 54, 59, 61, 64 ); А если у меня более 1000 записей... и мне нужна эта функция на все записи. Это и что, поочередно 1000 штук добавлять?

    • Богдан 25.02.2014 в 10:27 #

      Здравствуйте, Виталий. Тогда вам поможет такой, немного измененный, код:

      Ответ на вопрос: Как вывести одну случайную запись из всех на WordPress?

      function gb_rand_post()
      {
       $posts = get_posts(array( 'numberposts' => -1, 'fields' => 'ids' ));
       $post_ids = array();
      
       foreach( $posts as $post )
       {
        $post_ids[] = $post;
       }
      
       $post = get_post( $posts[ mt_rand( 0, count( $post_ids ) - 1 ) ] );
       $result = '';
      
       if( !is_null( $post ) )
       {
        $result .= '<div class="gb_rand_post">';
        $result .= '';
        $result .= '<h4>' . $post->post_title . '</h4>';
        $result .= '<div>' . $post->post_content . '</div>';
        $result .= '</div>';
       }
      
       return $result;
      }
      add_shortcode('gb_random_post','gb_rand_post');
      
  4. Альберт 28.09.2014 в 01:43 #

    Здравствуйте. А как сделать чтобы в конце записи выводились случайные записи в виде ссылок на них ?

    • Богдан 30.09.2014 в 18:59 #

      Альберт, я думаю, что вам стоит использовать для этого один из многочисленных плагинов. Их можно найти, введя в поле поиска в разделе Плагины - Добавить новый фразу "related posts".

  5. Антон 22.12.2014 в 01:24 #

    Здравствуй Богдан. Как сделать случайную ссылку на случайную запись? Т. е. мне нужно в меню сайта ссылку типа "случайная запись", при нажатии на которую, открывается случайная запись с соответствующим ей урл и комментариями.