Отображать последнюю публикацию из категории на странице


Я хочу отобразить на странице последний контент публикации из категории.

Например, категория foo содержит следующие сообщения:

    1. Привет, Мир
    1. Привет, Марс
    1. Фу бар

Учитывая 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]

Однако ошибка не появляется, но содержимое публикации не отображается.

Author: Community, 2015-03-09

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');
 5
Author: Pieter Goosen, 2015-03-12 08:08:59

Вы можете сделать что-то вроде этого:::

 $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;
 -1
Author: jycr753, 2015-03-09 08:39:17