tief gehendes verständnis für get_posts()

  • Hallo Zusammen,

    ich habe mit folgenden Code alle Breiträge in der index.php angezeigt:

    Das funktioniert auch super bis ich in der sidebar.php folgendes eingebaut habe um Beiträge nach Kategorien zu sortieren:

    Jetzt wird auf der Startseite nur noch der letzte Beitrag angezeigt und nicht mehr alle. :(

    Als ich

    PHP
    get_posts();

    in der index.php vor die foreach Schleife eingebaut habe wurden wieder alle Beiträge angezeigt. :confused: Allerdings auch ein Warning ausgegeben (fehlende Parameter in get_posts())


    Was bewirkt get_posts() im bezug auf nachfolgende Template Tags?
    Muss ich get_posts() jedesmal neu initialisieren?

    Ich habe dieses Gefühl, weil die sidebar.php zuerst geladen und interpretiert wird.

    Vielen Dank

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Prinzipiell ist die erstere Methode die richtige für das Generieren von WordPress-Webseiten. Viele Funktionen und Konfigurationseinstellungen arbeiten nur im Kontext des Loops korrekt. get_posts() ist eine alternative Methode, um einen Loop zu erzeugen bzw. eine Menge von Beitragsinstanzen zu generieren. Sie sollte generell nicht verwendet werden, um den Haupt-Loop zu ersetzen.

    Abgesehen davon, solltest Du aufpassen, dass Du keine von WordPress reservierten Variablennamen verwendest, d.h. am besten ein eigenes Präfix verwenden.

  • Hey mastermind,

    vielen Dank für die fixe Antwort. Darauf habe ich aber gleich zwei neue Fragen:

    Wie wäre dann die "Loop-Alternative" für die sidebar.php -> also links zu den Beiträgen nach Kategorien sortiert darstellen?

    Ich habe auf der index.php mit folgendem Workaround gearbeitet, um einzelne Beiträge anzuzeigen. Nachdem in der sidebar auf einen Link geklickt wurde:

    Das müsste dann ja auch einfacher gehen oder?

    Danke

  • mit get posts in der als erster geladenen sidebar zwingst du dem nachfolgenden loop genau diese Angaben auf,

    auf texto.de [suche nach loop]findest Du einige Loop Beispiele, die sich untereinander vertragen, vielleicht hilft Dir dies weiter...

  • Zunächst mal ist es keine gute Idee, Benutzereingaben ungeprüft zu übernehmen; schon gar nicht, wenn die Angaben an die Datenbank durchgereicht werden. Das hier:

    PHP
    $curpost = get_post($_GET['p']);


    ist geradezu eine Einladung an pöse Puben zu allerlei Schabernack.

    Ansonsten: Ich weiß ehrlich gesagt nicht, was das konkrete Problem bei Dir ist. Ich habe bspw. folgenden Code in meiner sidebar.php

    PHP
    $mycat_content = get_posts('');
    $mycat_output = '';
    	if (is_array($mycat_content)) {
    	foreach ( $mycat_content as $mycat_post ) {
    				$mycat_output .= '<h3><a href="'.get_permalink($mycat_post->ID).'" title="'.$mycat_post->post_title.'">'.$mycat_post->post_title.'</a></h3>';
    	}
    }
    
    
    echo $mycat_output;

    Läuft wie die wilde Wutze.

  • Ich schätze mal es liegt wirklich an dem $posts, da es - wie ja angemerkt - eine von WordPress verwendete Variable liegt.

    Bin jetzt bei php.net auf die Schnelle nicht fündig geworden, aber könnte es sein dass man erst versucht Variablen zu initialisieren, bevor Funktionen aufgerufen werden? Vielleicht liegts auch am Scope (sidebar.php ist ja sozusagen global).

    Gruß Jeriko

    Jeriko - Design, Style, Photographie

  • Vielen Dank für Eure Hilfe und Ideen!!!!

    Ich habe jetzt noch einwenig herumgespielt und es lag wirklich an $posts.
    Sprich $posts wird im Wordpress "Framework" global verfügbar gemacht.

    So was muss mal auch erstmal wissen :???:

  • Vielen Dank für Eure Hilfe und Ideen!!!!

    Ich habe jetzt noch einwenig herumgespielt und es lag wirklich an $posts.
    Sprich $posts wird im Wordpress "Framework" global verfügbar gemacht.

    So was muss mal auch erstmal wissen :???:

    ;)
    lache herzlich, so habe ich dies in meiner sehr *dautauglichen* Sprache versucht zu erklären

    Zitat

    mit get posts in der als erster geladenen sidebar zwingst du dem nachfolgenden loop genau diese Angaben auf,

    *kommt davon, wenn frau stets dautauglich schreibt oder versucht es zu tun

    lg

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!