Возвращает все данные поста из базы данных, содержащиеся в таблице wp_posts. Работает прекрасно для любых типов постов.
Если в функцию не передавать первый параметр, то она будет получать информацию о текущем посте в цикле, а про циклы смотрите видеоурок.
get_post( $post = null, $output = OBJECT, $filter = 'raw' );
OBJECT — в виде объекта,ARRAY_A — ассоциативный массив,ARRAY_N — нумерованный массив;raw (по умолчанию), edit, db, или display.Функция get_post() в случае успеха возвращает объект класса WP_Post, в случае неуспеха, например, если пост не существует – false.
Точнее сам WP_Post – это класс, а мы поговорим именно про объект класса WP_Post, $post = get_post().
Объект содержит следующие свойства.
YYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SShttps://misha.agency/?p=8542Давайте попробуем на примере:
$post = get_post( 1 ); print_r( $post );
Результат будет примерно таким:
WP_Post Object
(
[ID] => 1
[post_author] => 1
[post_date] => 2012-12-09 05:55:07
[post_date_gmt] => 2012-12-09 01:55:07
[post_content] =>
Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите ее, затем начинайте создавать!
[post_title] => Привет, мир!
[post_excerpt] =>
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_password] =>
[post_name] => privet-mir
[to_ping] =>
[pinged] =>
[post_modified] => 2012-12-09 05:55:07
[post_modified_gmt] => 2012-12-09 01:55:07
[post_content_filtered] =>
[post_parent] => 0
[guid] => https://misha.agency/?p=1
[menu_order] => 0
[post_type] => post
[post_mime_type] =>
[comment_count] => 1
[filter] => raw
)Или:
echo $post->ID; // 1 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; // Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите ее, затем начинайте создавать! echo $post->post_title; // Привет, мир! 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; // privet-mir echo $post->to_ping; echo $post->pinged; echo $post->post_modified; // 2012-12-09 05:55:07 echo $post->post_modified_gmt; // 2012-12-09 01:55:07 echo $post->post_content_filtered; echo $post->post_parent; // 0 echo $post->guid; // https://misha.agency/?p=1 echo $post->menu_order; // 0 echo $post->post_type; // post echo $post->post_mime_type; echo $post->comment_count; // 1 echo $post->filter; // raw
Предлагаю разобраться с форматом вывода. Итак, зная 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 );
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый день)
Скажите пожалуйста, я сделал через get_post функцию вывода последних новостей, все хорошо, но мне нужно вставить это в div'ы, получается, если я вставляю в разные дивы, оно выводит одни и те же функции, а поскольку я пытаюсь настроить сетку masonry, я не могу без дивов.
Скажите пожалуйста, как правильно мне выйти из этой ситуации, что бы и masonry корректно отображался и последние новости выводились без повторений?
Спасибо большое!!!
Добрый день! А можно на неё посмотреть?
Конечно.
Я подключил 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 постов не получится, потому что так оно выводит просто список.
Вот и вопрос, какую функцию можно вписать, что бы отображались последние данные без повторений?
Заранее спасибо!!!
#container по-любому нужно выносить из цикла.
Почему у вас это не получается? Как вы пробуете?
Все, я разобрался, спасибо!))
Только теперь я не могу разобраться в следующем: вот, хотелось бы сделать что-то похожее как на этом сайте http://www.the-village.ru/ , тут используется masonry или просто какие-то стили css.
Просто, если я в свой masonry пытаюсь что-то вписать, у меня все сбивается, вот я и подумал, может лучше использовать css. Или я не прав?
Спасибо!!!
Можете на этом месте подробнее?)
Я настроил 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/
Спасибо большое!