it-swarm.com.de

Den neuesten Beitrag aus einer Kategorie auf einer Seite anzeigen

Ich möchte den neuesten Beitragsinhalt einer Kategorie auf einer Seite anzeigen.

Beispielsweise hat die Kategorie foo die folgenden Beiträge:

    1. Hallo Welt
    1. Hallo Mars
    1. Foo Bar

Berücksichtigt man Foo Bar den neuesten Artikel aus foo Kategorie, sollte sein Inhalt auf einer Seite gerendert werden:

<title>
<content>

Wo <title> ist Foo bar und <content> ist der Inhalt des Beitrags.

Wie kann ich das machen?


Ich habe Mühe, die Antwort von @Pieter umzusetzen. Ich habe diese Zeilen in functions.php eingefügt:

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');

Auf der Seite mache ich:

[latest_post]

Es wird jedoch kein Fehler angezeigt, aber der Inhalt des Beitrags wird nicht angezeigt.

2
Ionică Bizău

Sie können WP_Query verwenden, um den neuesten Beitrag aus der Kategorie aufzurufen und anzuzeigen. Schauen Sie sich die Kategorie Parameter an . Standardmäßig verwendet WP_Querypost als Post-Typ und bestellt Post-by-Post-Datum, sodass wir dies von der Abfrage ausschließen können. Wenn Sie etwas anderes benötigen, können Sie es einfach in Ihren Argumenten definieren

Sie können im Grunde so etwas versuchen

$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();
}

Dies sollte Ihnen eine Basis bieten, die Sie nach Belieben ändern, anpassen und verwenden können. Wenn Sie sich hinsichtlich der Parameter und der Verwendung nicht sicher sind, lesen Sie die Codex-Seite WP_Query , um Unterstützung zu erhalten

BEARBEITEN

Ich bin mir nicht sicher, warum Sie sich entschieden haben, das Rad neu zu erfinden und mit get_posts fortzufahren, wobei ich Ihnen ein funktionierendes Beispiel für die Verwendung von WP_Query gezeigt habe. Ihre Verwendung von get_posts in Verbindung mit den Eigenschaften WP_Post ist völlig falsch

  • Die Eigenschaften von WP_Post sind ungefiltert, daher ist die Ausgabe davon völlig ungefiltert und sieht nicht so aus wie die Ausgabe von Template-Tags wie the_title() oder the_content(). Sie müssen die entsprechenden Filter für diese Eigenschaften verwenden

  • title und content sind ungültige Eigenschaften von WP_POST. Die andere Antwort ist völlig falsch. Es ist post_title und post_content

  • Sie können die Vorlagen-Tags wie gewohnt verwenden, indem Sie nur setup_postdata( $post ); und anschließend nur wp_reset_postdata() verwenden

Sie können Folgendes versuchen

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');
4
Pieter Goosen