1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

query_posts: post order nach Metainformtionen

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von wasserl, 22. April 2008.

  1. wasserl

    wasserl Member

    Registriert seit:
    4. August 2007
    Beiträge:
    13
    Zustimmungen:
    0
    query_posts: post order nach Metainformationen

    Hallo,
    ich habe eine Art Veranstaltungskalender mit wp realisiert. Die Nutzer geben ihren Beitrag ganz normal ein und müssen nur noch bei den custom fields jeweilsl das Datum der Veranstaltung angeben. im Index-template habe ich dann zwei loops stehen, der eine geht die Beiträge durch, fischt das Datum aus den Metadaten (und den Titel der Veranstaltung) und gibt sie in eine Tabelle aus, der zweite loop gibt die Artikel ganz normal aus. Mein Problem; ich möchte diese Tabelle mit den Veranstaltungen natürlich am liebsten so gestalten, dass die Termine in der richtige Reihenfolge sind, d.h. ich müsste die Datenbankquery nicht nach dem Postingdatum, sondern nach dem im custom fied gespeicherten Datum sortieren. Kann mir jemand sagen, wie das am einfachsten zu machen ist?
     
    #1 wasserl, 22. April 2008
    Zuletzt bearbeitet: 22. April 2008
  2. cywhale

    cywhale Well-Known Member

    Registriert seit:
    23. Januar 2007
    Beiträge:
    205
    Zustimmungen:
    0
    Hallo.
    Habe hier bei WP einen interessanten Text dazu gefunden, dort wird mittels einer eigenen Query und eingebundenem Custom Field gearbeitet, vielleicht kann man das entsprechend anpassen.
    Grüsse.
     
  3. wasserl

    wasserl Member

    Registriert seit:
    4. August 2007
    Beiträge:
    13
    Zustimmungen:
    0
    Vielen Danke cywhale.
    Jetzt habe ich da nur ein Problem; der für mich relevante Trick an dem Skript ist ja der hier


    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ich möchte jetzt nach einem custom field mit meta_key = datum und meta_value = <ein Text, der ein Datum repräsentiert> sortieren. Wie kriege ich sowas in eine ORDER BY-Anweisung rein? Die entspr. Tabelle sieht ja so aus;

    [...] meta_key meta_value
    datum 04.05.08
    titel einTitel
    datum [...]

    D.h. ich kann weder einfach sagen ORDER BY meta_key noch ORDER BY meta_value. Weiß jemand weiter? :(
     
  4. cywhale

    cywhale Well-Known Member

    Registriert seit:
    23. Januar 2007
    Beiträge:
    205
    Zustimmungen:
    0
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    In der Art müsste es funktionieren. Es werden nur Posts mit dem meta_key 'datum' gesucht und dann nach meta_value (alias metadate) absteigend (DESC) sortiert.
    Zur Beschleunigung der Abfrage wäre es noch besser statt wposts.* nur die benötigten Felder abzufragen, das '*' kostet ungemein Zeit.
     
  5. wasserl

    wasserl Member

    Registriert seit:
    4. August 2007
    Beiträge:
    13
    Zustimmungen:
    0
    Hey, Danke für die schnelle Antwort. Der Code funktioniert, soweit ich das beurteilen kann. Jetzt habe ich leider noch ein kleines Problem;
    In der DB ist ja das Feld als Text und nicht als Datum gespeichert. Um also wirklich zu sortieren, müsste ich sowas wie (korrigiert mich, wenn das schon falsch ist)
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Das habe ich ausprobiert. Ich habe die Daten im Format DD.MM.YY eingegeben, was nach meinen Recherchen von SQL nicht erkannt wird. Also habe ich testweise mal zwei der Daten in das Format YY-MM-DD geändert - amüsanterweise tauchen sie dann in der Abfrage nicht mehr auf (d.h. sie werden nicht ausgegeben)
    Ich habe daher zwei Fragen:
    1.) kann ich das so wie oben casten?
    2.) Gibt es u.U. eine Möglichkeit, die Daten direkt in der Abfrage so zu konvertieren, dass sie als DATE vearbeitet werden?
     
  6. wasserl

    wasserl Member

    Registriert seit:
    4. August 2007
    Beiträge:
    13
    Zustimmungen:
    0
    Hi,
    ich habe es hinbekommen. Das oben war mein Fehler, weiter unten in meinem Code hatte ich das Datum ausgelesen und zu nem timestamp konvertiert, um Termine aus dem Kalender zu entfernen, die bereits vergangen sind. Die Veränderung des Datumsformats hat dann dazu geführt, dass die entsprechenden Einträge nicht mehr richtig zerlegt wurden.

    Vielen Dank nochmal für deine Hilfe.
     
    #6 wasserl, 23. April 2008
    Zuletzt bearbeitet: 23. April 2008
  7. Miranda69

    Miranda69 Active Member

    Registriert seit:
    12. August 2006
    Beiträge:
    35
    Zustimmungen:
    0
    kannst du den Code, mit dem man vergangene Termin aus dem Kalender entfernt evtl. mal posten?
     
  8. wasserl

    wasserl Member

    Registriert seit:
    4. August 2007
    Beiträge:
    13
    Zustimmungen:
    0
    Ja, hier:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Die letzte Zeile entspricht ungefähr einem Tag, d.h. erst nachdem der Termin vergangen ist, wird er auch gelöscht, nicht an dem Tag selbst. Danach kommt halt die Ausgabe der einzelnen Datensätze und - nicht vergessen - rewindposts.

    Ich bin übrigens für kritische Anmerkungen dankbar. Ich bin kein nativer PHP-Programmierer und genau genommen nicht mal ein nativer Programmierer, schätze mal, das wird ein ziemlich unsauberer Hack sein, was ich da fabriziert habe.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden