Querdenkender Webworker mit WordPress-Affinität

WordPress als CMS: Artikelupdates

Mit WordPress kann man inzwischen so ziemlich jeden Unfug anstellen. Das ist keineswegs eine negative Feststellung, ganz im Gegenteil! <trollmode>Man sollte aber trotzdem immer kritisch an die Beantwortung der Frage, ob die Blog- bzw. CMS-Software im Einzelfall die richtige Wahl ist, herangehen. Ich denke da gerade an bbPress, wo sich wohl zudem auch Stillstand abzeichnet.</trollmode>

Wie auch immer … für ein Weblog oder als CMS ist WordPress meine erste Wahl. Betreibt man WordPress als CMS ist das ja eher als Strategie zu verstehen, wie man mit der Software umgeht. Die Basis ist immer gleich. In vielen Fällen kommt lediglich ein entsprechendes Theme zum Einsatz und anstelle der Auflistung von Posts in einer Timeline wird eine “statische” Seite auf der Homepage dargestellt.

Ob die weiteren Seiten dann als Pages oder Posts angelegt werden, hängt sicher von einer ganzen Reihe von Faktoren ab. Manchmal braucht man Tags oder der Post soll sich in den RSS-Feed einfügen, was in diesen Fällen ganz unweigerlich dazu führt, einen Artikel zu veröffentlichen und eben keine Seite anzulegen. Andererseits fügen sich Blogposts in der Regel auch in eine Art Zeitstrahl ein.

In einem Blog stellt es normalerweise kein Problem dar, den Zeitpunkt des Anlegens eines Posts darzustellen. In vielen Fällen ist es sogar wichtig, in irgendeiner Art darauf hinzuweisen, dass die Information bereits veraltet sein könnte. Bei einer Website, die mit WordPress als CMS läuft, kann es hingegen viel wichtiger sein, den Zeitpunkt der letzten Aktualisierung anzuzeigen.

Beispielsweise sieht man in der single.php verschiedener WP-Themes häufig, dass für die Anzeige des Datums die Funktionen the_time() oder the_date() zum Einsatz kommen. Für den CMS-Einsatz bieten sich die Funktionen the_modified_time() oder the_modified_date() an, um den Zeitstempel der letzten Aktualisierung eines Posts anzuzeigen.

Bei einigen Projekten werden zudem externe Daten verarbeitet und in den Posts angezeigt, was man erreicht, indem the_content() entsprechend modifiziert wird. Ich selbst mache das bei einigen Projekten so, dass ich einen Post anlege, welcher ein entsprechendes Custom Field erhält, damit die jeweiligen Funktionen wissen, was sie beim Rendern der Seite aus der Datenbank holen sollen.

Nun wäre es reichlich lästig, nach jeder Aktualisierung der externen Daten Post für Post zu öffnen, nur um auf den Aktualisierungs-Button zu klicken. Wenn man schon eine Logik erarbeitet hat, die sich darum kümmern soll, externe Daten in regelmäßigen Abständen zu verarbeiten, wäre es doch viel sinnvoller, hier bereits die erforderlichen Funktionalitäten einzubauen.

<?php

require_once('../wp-blog-header.php');

$result = $wpdb->get_results (
    "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = 'YOUR_META_KEY'"
);
if (!empty ($result)) {
    foreach ($result as $row) {
        wp_update_post (array ('ID' => $row->post_id));
    }
}

?>

Der obige Code wird genau das tun. Aber Vorsicht! Die Benutzung der Funktion wp_update_post() impliziert neben einer ganzen Reihe von internen Aufrufen beispielsweise einen Ping an alle externen Dienste, die normalerweise nach dem Anlegen oder nach dem Bearbeiten und Speichern von Artikeln informiert werden, was vielleicht nicht immer erwünscht ist und zudem sehr zeitintensiv sein kann.

<?php

require_once('../wp-blog-header.php');

$wpdb->query (
    $wpdb->prepare (
        "UPDATE {$wpdb->posts} SET post_modified = %s, post_modified_gmt = %s
        WHERE ID IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key =  %s)"
,
        current_time ('mysql'), current_time ('mysql', 1), 'YOUR_META_KEY'
    )
);

?>

Die zweite Variante führt das Update direkt auf der Datenbank durch, was die Ausführungszeit des Scripts erheblich beschleunigt. Zum Einsatz kommt zudem die WP-Funktion current_time(), damit man sich wegen des Formates der Spalten keine Gedanken machen muss. YOUR_META_KEY ist in beiden Fällen übrigens der Name das Custom Fields, auf das man sich beziehen will.

Have fun!

Das könnte Dich auch interessieren:

Kommentare

  1. Kleiner Hinweis: Dies würde ich so nicht tun, da du mit dem eigene SQL Statement eventuell abweichst, wenn sich da was ändert, es unsicher sein könnte und weil es vom WP Standard abweicht. Besser ist, die wp-load.php einzubinden und dann den post via Funktion (wp_update_post() – wenn ich jetzt richtig bin) aus WP upzudaten, also auch ohne Aufruf der Post via Klick.

  2. Hallo Frank!

    Ja, so wie in meinem ersten Beispiel.

    Allerdings stört mich da speziell, dass jedes Update ein Signal an die Pingdienste auslöst und die Geschwindigkeit – auch dadurch – nicht so Klasse ist.

    Ich gehe davon aus, dass mir das Statement um die Ohren fliegt, wenn sich der Standard ändert, auch wenn mir das speziell bei diesen beiden Spalten unwahrscheinlich vorkommt.

    $wpdb->query sollte im realen Einsatz natürlich noch abgeprüft werden …

  3. Nicht ganz, da du ja auch im ersten Bsp. via SQL holst, hier würde ich lieber Funktion get_post_meta() von WP holen; sollte gehen, da du ja mit wp-load.php alles hast. und vor allem die wp-load.php einbinden, die macht es sauber, da die genaue dafür ist.

  4. Ah, ich verstehe, worauf Du hinaus willst. Für get_post_meta() müsste ich aber bereits die ID’s der Posts haben.

    In einem speziellen Fall verarbeite ich Hoteldaten für mehr als 100 Reiseziele (sprich Posts). Der Logik ist aber nur bekannt, dass die entsprechenden Posts ein spezielles Custom Field haben.

    Auf den 2. Blick erscheint mir diese Variante hier passend:

    $result = get_posts (array (meta_key => ‘YOUR_META_KEY’, numberposts’ => -1));

    Allerdings bleibt leider weiterhin das Problem mit der Performance von wp_update_post() bestehen.

  5. Ich finde es immer wieder erstaunlich, wie oft man in Foren liest nur das CMS xy oder xyz seien richtige CMS Systeme.

    Wenig später hört man dann manchmal WordPress sei im Grunde ganz nett für Blogs, aber als richtiges CMS sei es natürlich völlig ungeeignet.

    Ich mag WordPress seit dem Tag an dem ich es nur mal kurz ausprobieren wollte. Ich habe noch nichts entdeckt, was man mit anderen CMS Systemen anstellen kann und mit mit WordPress nicht.

    Bisher lautet für mich die Frage nicht was WordPress alles kann, sondern wie man das jeweils anstellt.

    Viele Grüße
    Jan

  6. Ich setzte WordPress jetzt zwar noch nicht so lange ein, aber lange genug um zu wissen das es mir wirklich gut gefällt. Die vielen Möglichkeiten die dem User zur Verfügung gestellt werden sind echt überzeugend. Und mit diesen Tipps wirds noch besser :-)

  7. Von WordPress bin ich auch total begeistert. Ich hatte mich vorher immer nur gewundert warum alle so verrückt nach der Software sind, aber wenn man es selbst ausprobiert merkt mann das es die am einfachsten zu bedienende Software ist und man damit so ziemlich alles umsetzten kann, auch seiten die garnicht wie ein Blog aussehen. Danke für den Tipp, dass bei dem Befehl jedes mal ein Ping gesendet wird.

  8. Interesant….habe mich noch nie so gründlich mit wordpress auseinandergesetzt, aber es ist durchaus ein sehr vielseitiges CMS

  9. habe wordpress auch schon ein bisschen ausgetestet, aber nie wirklich damit gearbeitet. bisher habe ich das meiste mit joomla gemacht. ist zwar nicht so simpel und einfach wie wordpress, aber wenn man sich daran gwöhnt hat gehts ;).

  10. Wir benutzen WordPress auch als CMS und es ist dafür einfach eine der besten Lösungen. Einfach aufzusetzen und von Haus aus SEO optimiert. Und noch dazu kostenlos ;)
    Was will man mehr!

Trackbacks/ Pingbacks

  1. […] 12 Jahren erstellt er für Kunden Internetanwendungen. Zudem hat er sich seit einigen Jahren auf WordPress als CMS spezialisiert. Er erzählt uns wie er nach Italien gekommen ist und was das für ihn […]

Ihre Meinung ist uns wichtig

*