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

Per Custom Field nur Posts mit aktuellem Datum ausgeben - möglich?

Dieses Thema im Forum "Konfiguration" wurde erstellt von elvoges, 31. Dezember 2016.

  1. elvoges

    elvoges Member

    Registriert seit:
    15. Januar 2016
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo zusammen,

    kurz vor dem Jahreswechsel stellt sich mir ein kleines Problem - es geht um die Darstellung eines Kalenders mit Dienstplan:

    Aus einer XML-Dienstplan-Datei erstelle ich per All Import-Plugin automatisch 730 Posts (2 Posts mit Diensthabenden pro Tag, Custom Field enthält den Tag des Dienstes im Format dd.mm.yyyy). Jetzt wird es tricky:

    Ich möchte jeweils nur die beiden Posts des aktuellen Tages anzeigen lassen, und zwar von 12Uhr Mittags bis 12Uhr Mittags des Folgetags.
    Ein passendes Template sollte die Posts dann nebeneinander ausgeben, da kümmer ich mich drum wenn ich weiß ob die Umsetzung dieser Anzeige überhaupt möglich ist. Notfalls würde es mir auch reichen, wenn ich jeweils nur den aktuellen Dienst anzeigen lassen kann - der Rechner läuft komplett offline, notfalls stelle ich die Uhr vor/nach... :D

    Beim Import können auch noch weitere Felder angelegt werden - ich habe aber noch keine Idee, ob oder wie das bei der Umsetzung aktuell helfen kann :(

    Ich hoffe jmd. findet ein paar Minuten Zeit und kann mir den entscheidenden Tipp geben...

    Euch allen einen Guten Rutsch in ein sonniges und fröhliches Jahr 2017!!!

    elvoges
     
  2. Edi

    Edi Well-Known Member

    Registriert seit:
    26. Juli 2006
    Beiträge:
    3.728
    Zustimmungen:
    1
    Gib den Posts das entsprechende Datum (post_date/post_date_gmt) und zeige jeweils nur zwei Posts.
     
    #2 Edi, 31. Dezember 2016
    Zuletzt bearbeitet: 31. Dezember 2016
  3. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Braucht er doch gar nicht zwangsläufig, oder? Einfach eine query schreiben, die jeweils die beiden posts des aktuellen Tages ausgibt. Dafür kann man doch das als Bedingung das Custom field verwenden, das ohnehin das Datum enthält.
    Es ist halt nur etwas "Tricky" das Server-Datum und das Datum im Custom filed auf das gleiche Format zu bringen. Aber generell sollte das möglich sein.
     
  4. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
  5. elvoges

    elvoges Member

    Registriert seit:
    15. Januar 2016
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo ihr 3,

    vielen Dank für die schnellen Antworten - bei meta_query bin ich auch schon gelandet, im Codex ist ja "fast" mein Beispiel gelistet:

    meta_query:
    $args = array(
    'post_type' => 'event',
    'meta_key' => 'event_date',
    'meta_value' => date( "Ymd" ), // change to how "event date" is stored
    'meta_compare' => '>',
    );
    $query = new WP_Query( $args );Ich will nichts schönreden: ich habe bisher überwiegend mit Joomla gearbeitet und taste mich langsam an Wordpress heran. Allerdings immer nur als Einsteiger, nicht als Profi :) Daher tue ich mich mit dem Codex, wo er zu modifizieren und wann er wo im Template zu implementieren ist, etwas schwer.
    Wenn ich es richtig verstehe, müsste ich den o.g. Code ja "nur" wie folgt modifizieren:

    $args = array(
    'post_type' => 'post', // könnte auch event bleiben - müsste ich beim Import entsprechend ändern
    'meta_key' => 'notdienst_date',
    'meta_value' => date( "dd.mm.yyyy" ), // change to how "event date" is stored
    'meta_compare' => '=',
    );
    $query = new WP_Query( $args );In der letzten Zeile vergebe ich statt "new WP_Query" selbst einen neuen Namen oder setzt WP den? Wenn ich dann den lokalen Server um 12h versetzt laufen lasse, sollte das doch eigentlich schon passen - der Rechner ist ausschließlich für die Anzeige des Dienstplanes genutzt, daher ist die Zeitänderung mMn vernachlässigbar.

    Wie binde ich anschließend die meta_query dann bei get_posts() ein, etwa so?
    $args = array(
    'post_type' => 'post',
    'meta_query' => new WP Query( $args );
    );
    $postslist = get_posts( $args );Und nur zum Verständnis:
    get_posts() ändere ich dann unter wp-includes/post.php?
    meta_query ändere ich dann unter wp-includes/class-wp-query.php?

    Vielleicht nochmal zum "warum":

    Stand jetzt: Aktuell wird der Notdienstplan per .xml/.csv online veröffentlicht, jeweils für ein Jahr. Während dem Jahr gibt es kurz- und mittelfristige Änderungen, die sofort in den xml/csv-files verfügbar sind. Ich lade die Liste runter, trenne die 730 Termine in 2 Tabellen auf (2 Dienste x 365 Termine), und hacke das ganze Paket dann per Hand als Modul in Joomla ein. Bei jeder Änderung (und jedes Mal zum Jahresende) geht das Spiel von vorne los.

    Ziel: das All-Import-Plugin für WP erstellt aus der Datei automatisch 730 Posts, kann per cron-Job die Liste regelmäßig auf Änderungen überprüfen und die Posts neu anlegen/löschen, die geändert wurden. Das custom_field wird automatisch ausgefüllt und per Abfrage (wo ich definitiv Hilfe benötige) ausgeben.
    Dadurch müsste ich nicht bei jeder Änderung das Rad per Hand neu erfinden und bin gewappnet, was Änderungen in den Dienstplänen angeht.

    Danke für eure Hilfe - bitte habt Nachsicht :)

    Cheers & Danke & Gute Nacht
    elvoges
     
  6. elvoges

    elvoges Member

    Registriert seit:
    15. Januar 2016
    Beiträge:
    7
    Zustimmungen:
    0
    Oha...sorry, Formatierung verbockt...hier nochmal mit separiertem Code:

     
  7. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Du bist prinzipiell auf dem richtigen Weg. Aber bevor wir jetzt tiefer einsteigen, wie du deine Funktion anpassen muss und wo sie hingehört noch ein kurzer Gedanke:

    So wie du es jetzt beschreibst, finde ich deinen Weg ein bisschen um die Ecke gedacht. Du hast eine XML Datei, die du erst importierst, in Posts umwandelst und dann gefiltert ausgeben willst.

    Wärst du nicht vielleicht mit simpleXML (http://php.net/manual/de/book.simplexml.php) besser bedient?
    Dann könntest du direkt immer die beiden Datensätze aus der XML Datei ausgeben, ohne sie vorher zu importieren. D.h. du müsstest bei Änderungen nur noch die XML Datei austauschen...

    Ich würde übrigens auch nicht die Server-Zeit verstellen. Das wird zwar vermutlich auch gehen, eleganter wäre aber die 12 Stunden in PHP einfach draufzurechenen (oder abzuziehen). Das ist mit ein paar Zeilen erledigt.
     
  8. Edi

    Edi Well-Known Member

    Registriert seit:
    26. Juli 2006
    Beiträge:
    3.728
    Zustimmungen:
    1
    Da ein Beitrag normalerweise ein Datum hat, bräuchte es kein zusätzliches Custom Field. Das wäre die einfachste Lösung, ohne Query.

    Mit einer Query funktioniert das natürlich auch.
     
  9. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Ach, du meintest das Datum direkt als Post Date statt dem Custom Field...
    Ja das wäre tatsächlich sinnvoller. Hab ich gar nicht dran gedacht.

    Ich glaube trotzdem, der Umweg über den Import ist generell unnötig und man könnte/sollte lieber direkt die XML Datei einlesen und gefiltert ausgeben (vorrausgesetzt, der TE möchte mit den Datensätzen noch noch etwas anderes machen).
     
  10. elvoges

    elvoges Member

    Registriert seit:
    15. Januar 2016
    Beiträge:
    7
    Zustimmungen:
    0
    Ahoi und sorry für die Verspätung - Grippewelle :(

    @danielgoehr:
    Mir würde die direkte Ausgabe auch reichen - solange ich am Ende eine Darstellung der Termine nebeneinander realisieren kann. Weitere Verwendung für die Daten gibt es aktuell nicht. Allerdings verzweifle ich ein wenig an Deinem Link - ich habe wirklich nur ein basales Verständnis für PHP und merke, dass ich auch nach mehrfachem Lesen nicht wirklich verstehe, wie ich damit die gewünschten Daten ausgeben kann :(

    @Edi:
    Würde wahrscheinlich auch gehen, wenn beim Import die Notdienst-Termine als Post-Datum gesetzt werden. Muss mal schauen ob das All Import-Plugin das hinbekommt - eine manuelle Änderung der Beitrags-Daten macht keinen Sinn :(

    Ich bin gespannt - freue mich auch euren Input! Und: vielen Dank für eure Unterstützung!

    Cheers
    Thilo
     
  11. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Dann bleib bei der Variante mit dem Custom Post Type. Funktionieren wird das auch, ich finde es nur relativ umständlich, deswegen der Vorschlag.

    Was hast du denn bislang jetzt schon ausprobiert? Woran hakt es denn aktuell?
    Wenn ich das richtig sehe, stehen eigentlich benötigen Infos schon in diesem Thread.
    Insofern wäre es gut zu wissen, an welcher Stelle genau du nicht weiter kommst.
     
  12. elvoges

    elvoges Member

    Registriert seit:
    15. Januar 2016
    Beiträge:
    7
    Zustimmungen:
    0
    Ahoi,
    ich habe noch ein wenig gefrickelt und es inzwischen hinbekommen:


    • Import der Termine aus einer .xml mittels AllImport-Plugin, Ausgabe als Posts
    • Posts bekommen beim Import das Notdienstdatum als geplanten Veröffentlichungsdatum
    • Theme mit 2-Spalten-Layout, Blogseite mit neuesten Beiträgen als Homepage
    • Anzahl der Beiträge auf Startseite: 2
    • Pagination, Autor, Kommentare & Kategorie entfernt

    Am Ende ging es dann fast ohne Arbeit am Code, das einzige ToDo waren die Anpassungen am Theme bzgl. Pagination & Posts-Details.
    Ist wahrscheinlich in der Tat etwas umständlich, erleichtert mir die Arbeit allerdings massiv.
    Was ich aus dieser Aufgabe definitiv gelernt habe, ist dass mein Wissen bzgl. WP und dem Codex sehr gering ist. Aufgabe für 2017: etwas mehr davon verstehen...falls ihr da eine gute Quelle für komplette Anfänger habt, immer her damit :)

    Nochmal vielen Dank für eure Hilfe @danielgoehr & @Edi

    Beste Grüße
    Thilo
     
  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