get_post() — возвращает всю информацию о конкретной записи

Возвращает всю инфу, содержащуюся в базе данных (таблица wp_posts) об указанном в параметрах посте (любого типа, то есть это может быть страница page, запись post или какой-либо произвольный тип записи).

get_post( $post = null, $output = OBJECT, $filter = 'raw' );
$post
(целое число|объект) ID конкретного поста или его объект, по умолчанию — текущий пост
$output
(строка) формат получаемых данных:

  • OBJECT — в виде объекта,
  • ARRAY_A — ассоциативный массив,
  • ARRAY_N — нумерованный массив;
$filter
(строка)

Параметры объекта поста WP_Post

То есть в этом случае $output = OBJECT. Каждый из параметров соответствует столбцу из таблицы MySQL.

ID
(целое число) ID поста
post_author
(целое число) ID автора поста
post_date
(строка) дата и время публикации поста в формате YYYY-MM-DD HH:MM:SS
post_date_gmt
(строка) дата и время (GMT) публикации поста в формате YYYY-MM-DD HH:MM:SS
post_content
(строка) контент (содержимое) поста
post_title
(строка) заголовок
post_category
(строка) по идее это ID рубрики, к которой относится пост, однако с версии WordPress 2.1 всегда равно 0, чтобы определить рубрики, воспользуйтесь функцией get_the_category().
post_excerpt
(строка) содержимое поля «Цитата»
post_status
(строка) статус поста
comment_status
(строка) настройки комментирования
ping_status
(строка) разрешены ли трэкбэки и пингбэки
post_password
(строка) пароль к посту
post_name
(строка) ярлык поста
to_ping
(строка) URL для пинга
pinged
(строка) URL, которые уже пингнуты
post_modified
(строка) дата и время последнего обновления(редактирования) поста в формате YYYY-MM-DD HH:MM:SS
post_modified_gmt
(строка) дата и время GMT последнего обновления(редактирования) поста в формате YYYY-MM-DD HH:MM:SS
post_content_filtered
(строка)
post_parent
(целое число) ID родительского поста (например для вложений или страниц)
guid
(строка) ссылка на пост вида https://truewp.ru/?p=8542
menu_order
(целое число)
post_type
(строка) тип поста
post_mime_type
(строка) MIME тип (для вложений)
comment_count
(целое число) количество комментариев к посту

Теперь возьмем для примера пост про WP_Query и выведем всю инфу о нем. Если к параметру не оставлено комментариев в этом листинге кода — значит он пустой для данного поста, post_content я разумеется сократил.

echo $post->ID; // 1285
echo $post->post_author; // 1
echo $post->post_date; // 2012-12-09 05:55:07
echo $post->post_date_gmt; // 2012-12-09 01:55:07
echo $post->post_content; // Про класс WP_Query можно сказать в двух словах - бла бла бла
echo $post->post_title; // WP_Query(), описание класса, параметры
print_r( $post->post_category ); // Array ( [3] => 3 )
echo $post->post_excerpt;
echo $post->post_status; // publish
echo $post->comment_status; // open
echo $post->ping_status; // open
echo $post->post_password;
echo $post->post_name; // wp_query
echo $post->to_ping;
echo $post->pinged;
echo $post->post_modified; // 2012-12-09 12:46:24
echo $post->post_modified_gmt; // 2012-12-09 08:46:24
echo $post->post_content_filtered;
echo $post->post_parent;  // 0
echo $post->guid; // https://truewp.ru/blog/?p=1285
echo $post->menu_order; // 0
echo $post->post_type; // post
echo $post->post_mime_type; // 
echo $post->comment_count; // 18

Примеры использования

Предлагаю разобраться с форматом вывода. Итак, зная ID поста, выведем например его статус и заголовок. Пример, когда возвращается объект:

$my_post = get_post( 5 );
echo $my_post->post_status;
echo $my_post->post_title;

Ассоциативный массив:

$my_post = get_post( 5, ARRAY_A );
echo $my_post['post_status'];
echo $my_post['post_title'];

В случае с нумерованным массивом нужно заранее знать индексы соответствующих значений. Их можно выяснить например при помощи php-функции print_r().

$my_post = get_post( 5, ARRAY_N );
echo $my_post[7];
echo $my_post[11];

Важно: указывать ID поста в виде целого числа стало возможно только после версии WordPress 3.5. До этого ID поста нужно было передавать только в переменной, то есть:

$post = 5;
$my_post = get_post( $post );

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

  • Aleksander26 мая 2015 в 17:05 #

    Добрый день)
    Скажите пожалуйста, я сделал через get_post функцию вывода последних новостей, все хорошо, но мне нужно вставить это в div'ы, получается, если я вставляю в разные дивы, оно выводит одни и те же функции, а поскольку я пытаюсь настроить сетку masonry, я не могу без дивов.
    Скажите пожалуйста, как правильно мне выйти из этой ситуации, что бы и masonry корректно отображался и последние новости выводились без повторений?
    Спасибо большое!!!

    • Миша27 мая 2015 в 12:05 #

      через get_post функцию вывода последних новостей

      Добрый день! А можно на неё посмотреть?

      • Aleksander27 мая 2015 в 13:05 #

        Конечно.
        Я подключил masonry, вставил функцию для вывода последних новостей:

        <?php
        global $post;
        $args = array( 'posts_per_page' => 3, 'offset'=> 1 );
        $myposts = get_posts( $args );
        foreach( $myposts as $post ) :	setup_postdata($post); ?>
        <div id="container" class="js-masonry" data-masonry-options='{ "columnWidth": 200, "itemSelector": ".item" }'>
          <div class="item"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail() ?></a></div>
        <div class="item w2"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail() ?></a></div>
        </div>
         
        <?php endforeach; ?>
        <?php wp_reset_postdata() ?>

        Только теперь проблема в следующем, по функции у меня отображаются последние 3 поста, если я их вывожу в разных дивах, то они показывают 6 постов, из которых 3 повторяются, потому что выполняют одну и ту же функцию. А без дивов masonary не будет корректно отображаться. И в один див все впихнуть и сказать, что бы в функции отображались 10 постов не получится, потому что так оно выводит просто список.
        Вот и вопрос, какую функцию можно вписать, что бы отображались последние данные без повторений?
        Заранее спасибо!!!

        • Миша28 мая 2015 в 01:05 #

          #container по-любому нужно выносить из цикла.

          И в один див все впихнуть и сказать, что бы в функции отображались 10 постов не получится, потому что так оно выводит просто список.

          Почему у вас это не получается? Как вы пробуете?

  • Aleksander28 мая 2015 в 12:05 #

    Все, я разобрался, спасибо!))
    Только теперь я не могу разобраться в следующем: вот, хотелось бы сделать что-то похожее как на этом сайте http://www.the-village.ru/ , тут используется masonry или просто какие-то стили css.
    Просто, если я в свой masonry пытаюсь что-то вписать, у меня все сбивается, вот я и подумал, может лучше использовать css. Или я не прав?
    Спасибо!!!

    • Миша29 мая 2015 в 08:05 #

      Просто, если я в свой masonry пытаюсь что-то вписать, у меня все сбивается

      Можете на этом месте подробнее?)

      • Aleksander29 мая 2015 в 09:05 #

        Я настроил masonry на главной странице, все отлично, у меня такой код:

        <div id="container" class="js-masonry" data-masonry-options='{ "columnWidth": 200, "itemSelector": ".item" }'>
        <?php
        	global $post;
        	$args = array( 'posts_per_page' => 1);
        	$myposts = get_posts( $args );
        	foreach( $myposts as $post ){
        		setup_postdata($post);
        		?>
        		<div class="item"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail() ?></a></div>
        		<?php 
        	}
        	wp_reset_postdata();
        	?>
         
        <?php wp_reset_postdata() ?>
        </div>

        Отображается на главной странице все нормально.

        Захотел я добавить под каждой картинкой заголовок и цитату к статье, прописал следующий код:

        <div id="container" class="js-masonry" data-masonry-options='{ "columnWidth": 200, "itemSelector": ".item" }'>
        <?php
        	global $post;
        	$args = array( 'posts_per_page' => 3);
        	$myposts = get_posts( $args );
        	foreach( $myposts as $post ){
        		setup_postdata($post);
        		?>
        		<article id="post-<?php the_ID(); ?>">
        		<header>
        		<div class="item"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail() ?></a></div>
        		<div><?php the_title(); ?></div>
        		</header>
        		<content>
        		<?php echo accesspresslite_excerpt( the_excerpt() , 400 ) ?>
        		</content>
        		<?php 
        	}
        	wp_reset_postdata();
        	?>
        </article>
        <?php wp_reset_postdata() ?>
        </div>

        и теперь картинки отображаются некорректно, очень маленькие.
        Картинки сжались, а заголовки и цитаты разбросаны по всей странице.
        Я даже не знаю, что можно сделать, в идеале хотелось бы что-то такое как в http://demo.lp-tricks.com/recent-posts/responsive-grid-dark/
        Спасибо большое!

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

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.