Benutzerdefinierte WP-Post-Schleife zeigt nur einen Post an

Lesezeit: 2 Minuten

Ich habe einen Shortcode erstellt, um die Schleife auf meiner benutzerdefinierten Homepage anzuzeigen:

function home_loop_shortcode() {    
    $args = array(
        'post_type'         => 'post', 
        'post_status'       => 'publish', 
        'posts_per_page'    => '8',
        'cat'               => '3, 6',
        'orderby'           => 'date'
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $postlink = get_permalink(get_the_ID());
            $html="<li><a href="" . $postlink . '">' . get_the_title() . '</a></li>';
        }
    }
    return $html;
    wp_reset_postdata();
}
add_shortcode( 'loop', 'home_loop_shortcode' );

Ich habe tatsächlich 8 Beiträge in Kategorie ID 3 und 6, aber nur der erste Beitrag wird angezeigt. Der Code ist in diesem HTML verschachtelt:

<div class="home-loop">
    <h3>Latest posts</h3>
    <ul>
        [loop]
    </ul>
</div>

Auch wenn ich entferne 'cat' Linie, oder ersetzen Sie es durch 'category_name' => 'foo'oder wenn ich setze 'posts_per_page' => -1, nichts ändern. Wahrscheinlich übersehe ich etwas Offensichtliches… Hilfe!😭😅

du überschreibst $html mit dem letzten Beitrag, anstatt ihn zu verketten.

also definiere $html=""; und verkette es dann:

function home_loop_shortcode() {    
    $args = array(
        'post_type'         => 'post', 
        'post_status'       => 'publish', 
        'posts_per_page'    => '8',
        'cat'               => '3, 6',
        'orderby'           => 'date'
    );
    $query = new WP_Query($args);
    $html="";
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $postlink = get_permalink(get_the_ID());
            $html .= '<li><a href="' . $postlink . '">' . get_the_title() . '</a></li>';
        }
    }
    return $html;
    wp_reset_postdata();
}
add_shortcode( 'loop', 'home_loop_shortcode' );

  • Ich denke, Sie sollten die Ausgabepufferung verwenden.

    – zillionera_dev

    14. November um 17:26 Uhr

  • Ja, das war das Problem. Ich dachte, es wäre nicht nötig, wenn es nur eine Zeile gäbe. Ich habe mich geirrt, wir lernen jeden Tag dazu. Vielen Dank.

    – Drachennetz

    14. November um 18:22 Uhr

Benutzeravatar von Krunal Bhimajiyani
Krunal Bhimajiyani

Probieren Sie diesen Code aus:

Sie müssen eine Verkettung mit $html durchführen.

function home_loop_shortcode() {
    $html="";
    $args = array(
        'post_type'         => 'post', 
        'post_status'       => 'publish', 
        'posts_per_page'    => '8',
        'cat'               => '3, 6',
        'orderby'           => 'date'
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $postlink = get_permalink(get_the_ID());
            $html .= '<li><a href="' . $postlink . '">' . get_the_title() . '</a></li>';
        }
    }
    return $html;
    wp_reset_postdata();
}
add_shortcode( 'loop', 'home_loop_shortcode' );

1434690cookie-checkBenutzerdefinierte WP-Post-Schleife zeigt nur einen Post an

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy