Отображать последнюю публикацию из категории на странице
Я хочу отобразить на странице последний контент публикации из категории.
Например, категория foo
содержит следующие сообщения:
- Привет, Мир
- Привет, Марс
- Фу бар
Учитывая Foo Bar последнюю статью из категории foo, ее содержание должно быть отображено на странице:
<title>
<content>
Где <title>
- это Foo bar и <content>
- это содержимое поста.
Как я могу это сделать?
Я изо всех сил пытаюсь реализовать ответ @Pieter. Я добавил эти строки в functions.php
:
function latest_post() {
$args = array(
'posts_per_page' => 1, // we need only the latest post, so get that post only
'cat' => '4' // Use the category id, can also replace with category_name which uses category slug
);
$str = "";
$posts = get_posts($args);
foreach($posts as $post):
$str = $str."<h2>".$post->title."</h2>";
$str = $str."<p class='post-content-custom'>".$post->content."</p>";
endforeach;
return $str;
}
add_shortcode('latest_post', 'latest_post');
На странице, которую я делаю:
[latest_post]
Однако ошибка не появляется, но содержимое публикации не отображается.
2 answers
Вы можете использовать WP_Query
, чтобы вызвать последнее сообщение из категории и отобразить его. Взгляните на параметры категории . По умолчанию WP_Query
использует post
в качестве типа публикации и заказывает публикацию по дате публикации, поэтому мы можем исключить это из запроса. Если вам нужно что-то еще, вы можете просто определить их в своих аргументах
В принципе, вы можете попробовать что-то вроде этого
$args = array(
'posts_per_page' => 1, // we need only the latest post, so get that post only
'cat' => 'ID OF THE CATEGORY', // Use the category id, can also replace with category_name which uses category slug
//'category_name' => 'SLUG OF FOO CATEGORY,
);
$q = new WP_Query( $args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
//Your template tags and markup like:
the_title();
}
wp_reset_postdata();
}
Это должно предоставить вам базу, которую вы можете изменять, настраивать и использовать по своему усмотрению. Если вы не уверены в параметрах и использовании, ознакомьтесь с WP_Query
страница кодекса для помощи
РЕДАКТИРОВАТЬ
Я действительно не уверен, почему вы решили изобрести велосипед и пойти с get_posts
, где, как я показал вам рабочий пример использования WP_Query
. Ваше использование get_posts
в сочетании с WP_Post
свойства совершенно неверны
Свойства
WP_Post
не отфильтрованы, поэтому вывод из этого полностью не отфильтрован и не будет выглядеть то же самое, что и вывод из тегов шаблона, таких какthe_title()
илиthe_content()
. Вы должны использовать соответствующие фильтры для этих свойствtitle
иcontent
является недопустимыми свойствамиWP_POST
. Другой ответ совершенно неверен. Этоpost_title
иpost_content
Вы можете использовать теги шаблона как обычно, просто используя
setup_postdata( $post );
, а затем просто используяwp_reset_postdata()
впоследствии
Вы можете попробовать следующее
function latest_post() {
$args = array(
'posts_per_page' => 1, // we need only the latest post, so get that post only
'cat' => '4' // Use the category id, can also replace with category_name which uses category slug
);
$str = "";
$posts = get_posts($args);
foreach($posts as $post):
$str = $str."<h2>". apply_filters( 'the_title', $post->post_title) ."</h2>";
$str = $str."<p class='post-content-custom'>". apply_filters( 'the_content', $post->post_content ) ."</p>";
endforeach;
return $str;
}
add_shortcode('latest_post', 'latest_post');
Вы можете сделать что-то вроде этого:::
$args = array(
'post_type' => '__post_type__',
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'ASC'
);
$posts = get_posts($args);
foreach($posts as $post):
echo $post->ID;
echo $post->title;
echo $post->content;
endforeach;