it-swarm.com.de

die get_posts () - Schleife gibt für jeden Beitrag dasselbe the_title () zurück

Ich verwende get_posts(), um Beiträge aus einer bestimmten Kategorie abzurufen, die am oberen Rand meiner Startseite angezeigt werden, getrennt von der Hauptstartseite Loop. Alles scheint gut zu funktionieren, aber der Titel (zurückgegeben durch the_title()) ist immer der gleiche. der Titel des ersten Beitrags, der von get_posts() abgerufen wurde. the_permalink() macht dasselbe, aber the_excerpt() gibt für jeden Beitrag das richtige Ergebnis zurück.

Hier ist mein Code (ich habe nur ein paar Zeilen entfernt, aus Angst, ich könnte versehentlich entfernen, was dieses Problem verursacht):

$query = get_posts(array(
    'numberposts'=>-1,
    'category'=>3
    ));
$events = array();

if ($query) {
    foreach ($query as $tpost) {
        $fields = get_post_custom($tpost->ID);
        if (isset($fields['event_start'])) {
            $usetime = $fields['event_start'][0];
            if (isset($fields['event_end'])) {
                $usetime = $fields['event_end'][0];
                }
            if ($usetime>time()) {
                $events[] = array("post"=>$tpost,"fields"=>$fields);
                }
            }
        }
    usort($events,function($a,$b){
        $a = $a['fields']['event_start'][0];
        $b = $b['fields']['event_start'][0];
        if ($a==$b) { return 0; }
        return ($a < $b) ? -1 : 1;
        });
    }

if (count($events)>0) { ?>
    <div class="pad10 tac">
    <h2 class="mar10">Upcoming Events</h2>
    <div class="tiles">
    <?php foreach ($events as $event ) { ?>
        <?php setup_postdata( $event['post'] );?>
        <a href="<?php the_permalink(); ?>" class='noshow'>
        <div class="tile smalltile"><div id='post-<?php the_ID(); ?>'>
            <h2><?php the_title();?></h2>
            <b><?php
            echo(date_i18n("D, F j @ g:ia",$event['fields']['event_start'][0]));
            ?></b>
            <p><?php the_excerpt();?></p>
        </div></div>
        </a>
    <?php }?>
    </div></div>
<?php }?>

Ich kratzte mich wirklich am Kopf, zumal dieser Code größtenteils auf dem get_posts()-Beispiel aus diesem Artikel basiert, in dem er Berichten zufolge einwandfrei funktioniert.

Ich denke, dass dies wahrscheinlich etwas mit meiner Verwendung von setup_postdata zu tun hat, aber ich nehme an, dass dies wirklich nur wilde Spekulationen sind.

1
laef

Milos 'Kommentar in eine Antwort verwandeln ...

Das Problem, mit dem Sie konfrontiert sind, ist das Ergebnis vieler auf WordPress-Vorlagen ausgerichteter Funktionen, die einige globale Variablen erwarten. Bei WP_Query-basierten Schleifen erfolgt die Einstellung dieser Variablen durch Aufrufen der the_post()-Methode des WP_Query-Objekts. Bei get_posts müssen Sie hierfür setup_postdata() aufrufen.

Ich persönlich bevorzuge es einfach, Funktionen wie the_title zu vermeiden, anstatt Funktionen wie get_the_title, die eine explizite Beitrags-ID akzeptieren, wann immer dies möglich ist.

1
Mark Kaplun