Weitere Informationen und den Download findest du auf der offiziellen Anlaufstelle de.wordpress.org
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12
Like Tree8Likes

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

  1. #1
    PostRank: 0
    Registriert seit
    15.01.2016
    Beiträge
    7

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

    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...

    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. #2
    Edi
    Edi ist offline
    PostRank: 10 Avatar von Edi
    Registriert seit
    26.07.2006
    Ort
    Zürich
    Beiträge
    3.168
    Gib den Posts das entsprechende Datum (post_date/post_date_gmt) und zeige jeweils nur zwei Posts.
    Geändert von Edi (31.12.2016 um 19:25 Uhr)
    elvoges likes this.
    <clickwork> - Microsponsor WordCamp Bern, 8./9. September 2017.

  3. #3
    PostRank: 9 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.322
    Zitat Zitat von Edi Beitrag anzeigen
    Gib den Posts das entsprechende Datum (post_date/post_date_gmt) und zeige jeweils nur zwei Posts.
    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. #4
    PostRank: 10 Avatar von b3317133
    Registriert seit
    21.11.2014
    Beiträge
    1.585
    Sowas macht man z.B. mit get_posts() mit dem Parameter meta_query.
    Edi and elvoges like this.

  5. #5
    PostRank: 0
    Registriert seit
    15.01.2016
    Beiträge
    7
    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. #6
    PostRank: 0
    Registriert seit
    15.01.2016
    Beiträge
    7
    Oha...sorry, Formatierung verbockt...hier nochmal mit separiertem Code:

    Zitat Zitat von elvoges Beitrag anzeigen
    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:
    Code:
    $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:

    Code:
    $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?
    Code:
    $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

  7. #7
    PostRank: 9 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.322
    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.
    elvoges likes this.

  8. #8
    Edi
    Edi ist offline
    PostRank: 10 Avatar von Edi
    Registriert seit
    26.07.2006
    Ort
    Zürich
    Beiträge
    3.168
    Zitat Zitat von danielgoehr Beitrag anzeigen
    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.
    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.
    elvoges likes this.
    <clickwork> - Microsponsor WordCamp Bern, 8./9. September 2017.

  9. #9
    PostRank: 9 Avatar von danielgoehr
    Registriert seit
    13.07.2016
    Ort
    Berlin
    Beiträge
    1.322
    Zitat Zitat von Edi Beitrag anzeigen
    Da ein Beitrag normalerweise ein Datum hat, bräuchte es kein zusätzliches Custom Field. Das wäre die einfachste Lösung, ohne Query.
    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).
    Edi and elvoges like this.

  10. #10
    PostRank: 0
    Registriert seit
    15.01.2016
    Beiträge
    7
    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

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •