$post enthält immer Daten des letzten Posts statt der Übersichtsseite

  • Hi,

    mein eigentliches Problem ist, dass ich eine Unterscheidung zwischen Post und Kategorie (bzw Übersichtsseite) machen möchte. Folgendes klappt aber leider nicht:

    Code
    if($post->ID == 11){echo "Kategorie";}
    else{echo "Post";}

    Das Problem ist, dass auf meiner statischen Seite http://www.../blog, auf der die Artikel (als Snippets) ausgegeben werden, die Variable $post immer die Daten des letzten Posts enthält. Wenn ich zB ganz am Anfang der index.php (Graphene Theme) den oben genannten Code einfüge, wird auf der Blogseite "Post" ausgegeben. In der Datenbank sehe ich aber, dass die ID der entsprechenden Seite in wp_posts gleich 11 ist.

    Vielleicht verständlicher: Für folgenden Code in der index.php wird auf meiner Blogseite "1288" ausgegeben:

    Code
    echo $post->ID;

    Die korrekte ID wäre aber "11".

    Weiß jemand, wie ich mir die echte ID der Blogseite ausgeben lassen kann? Oder gibt es vielleicht eine andere Möglichkeit, wie ich die Blogseite eindeutig identifizieren kann (bzw von Artikeln unterscheiden)??

    BG

    • 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

  • Ich hab eine Lösung gefunden :)

    Zwar funktioniert is_archive() komischerweise nicht, um die Archivseite (Blogseite) zu identifizieren. Aber is_singular() ergibt bei einer Beitragsseite true und bei der Archivseite false. So geht's auch.

  • zurück zum Ursprung:
    Posts sind zb Beiträge und Seiten (siehe Dashboard) und anderes
    jeder Post hat eine ID

    im Frontend gibt es diverse Seiten Home, Blog, Category, pages, usw
    auf Home (oder bei dir Blog), Categorey, Archive usw werden mehrer Posts (beiträge) angezeigt, dh auf der Seite kommen mehrere ID dann natürlich vor, dabei stoßt man immer auf den Begriff Loop (ein Schleife über mehrere Beiträge)
    dann gibt es noch Seiten wo nur ein post angezeigt wird
    zb bei Pages (meist Standarmäßige Seiten im Menü) werden die Seiten (die man im Dashboard anlegt) angezeigt.
    bei Single, wird zb ein Post (Beitrag) angezeigt.
    is_singular zeigt dort an wo du den code eingesetzt hast.
    eine Einzelbeitragsseiten Single zeigt natürlich True, Archive daher false,
    Blog Seite wo mehrer Beiträge angezeigt werden würde dann ebenfalls false zeigen

    warum bei deiner ersten Frage nicht 11 sondern 1288 angezeigt wurde, liegt wahrscheinlich daran, weil du die ID innerhalb des Loop abgefragt hast, und dort mehrer Beiträge dann angezeigt werden, von Nr 11 bis Nr 1288

    wenn es dich beschäftigt, lies mal http://codex.wordpress.org nach um die Templates und Posts Strukturen und weiteres zu verstehen.

    Wordpress weil es spass macht, besonders beim WordPress Meetup in Linz

  • Danke für die Hilfe!

    alchymyth
    is_home springt bei der Archivseite (/blog) an UND bei einer Artikelseite ebenfalls (/article1288 ).

    Shadow
    Ich hatte [COLOR=#333333]echo $post->ID; ganz oben in der index.php meines Themes eingefügt. Wenn ich richtig liege, müsste das doch eine Stelle außerhalb des Loop sein, quasi der Ausgangspunkt aller php Scripte. Deshalb ist es ja auch so verwunderlich. Im Dashbord sehe ich nämlich, dass die ID von /blog 11 ist, genauso auch in der Datenbank. Nur die Abfrage via php ergibt immer die ID, des zuletzt veröffentlichten Posts.
    [/COLOR]
    Irgendwas muss es mit der $post Variable zu tun haben. Schließlich ist sie immer mit den Daten des letzten Post bestückt. Keine Ahnung, ob die irgendwo resettet hätte werden müssen und jetzt auch außerhalb des Loops noch verfügbar ist. Das ist jetzt aber nur noch Halbwissen und wilde Spekulation :)

  • da wilde Spekulation dich nicht zu Ziel führen, die Strukturen von Wordpress und die dazu notwendigen PHP kenntnisse sind auf codex.wordpress.org und http://www.php.net zu finden, ohne diese Kenntnisse dir erklären zu wollen, das deine Spekulationen leider nicht zielführen sind, weil Programmierung auch mehr als Halbwissen verlangt, wird uns und auch dich nicht weiterbringen.
    denn die $post->ID wird bei einem Loop natürlich bei jedem post neu beschrieben, und immer die letzte ID drin stehen, WP nutzt diese Variable um dann den richtigen Post anzuzeigen, die Richtigen Links im Titel zu setzten, die richtigen Kategorien anzuzeigen usw.. aber der Anfang das wären Programmier Grundkenntnisse, die noch nicht mal PHP Grundlagen sein brauchen, sprich was ist eine Variable und wie arbeitet man mit Variablen.

    Wordpress weil es spass macht, besonders beim WordPress Meetup in Linz

    Einmal editiert, zuletzt von Shadow (14. Februar 2014 um 20:18)

  • Hehe, ich verstehe gut, dass Helfende nicht so gut drauf zu sprechen sind, wenn jemand ohne die nötigen Grundkenntnisse und entsprechende Eigeninitiative um Rat fragt. Glaub mir aber bitte, dass ich schon nen ganzen Tag auf wordpress.org u Co unterwegs war bevor ich hier gepostet habe. Grundkenntnisse muss ich mir aus Zeitgründen leider nach und nach aneignen...

    Solange dämmert mir aber das Prinzip. $post ist wohl nur für Posts (wie der Name schon sagt). Bei einer Archivseite machen ja auch Werte wie post_content oder post_excerpt keinen Sinn. Ich hab das ganze auch mal auf einer anderen Seite beim twentythirteen Theme ausprobiert. Da wird natürlich auch die ID des letzten Posts angezeigt.

    Wen es interessiert - an die ID außerhalb von Posts kommt man mit get_queried_object_id()

    Also nichts für ungut bitte. Problem gelöst. Und nochmals danke für die Bemühungen!

Jetzt mitmachen!

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