Datum letzter Blogänderung anzeigen

  • Hallo,

    jetzt wird's wohl knifflig. Ich habe bisher ein "Blog" als einfache HTML-Seite editiert und das Datum der letzten Änderung mit einem PHP-Script auf meiner Website ausgeben lassen:

    [FONT=Courier New]<?php
    $meineHtmlDatei = 'aktuell.htm';
    file_exists($meineHtmlDatei) or die(
    "'{$meineHtmlDatei}' fehlt!"
    );
    $timestamp = filemtime($meineHtmlDatei);
    $formatiertesDatum = strftime('%d.%m.%Y', $timestamp);
    print $formatiertesDatum;
    ?>
    [/FONT]
    Das würde ich mit dem WordPress-Blog auch gern machen. Aber wie?

    Tipps sehr willkommen!

    Danke im Voraus,

    AnselmR

    • 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

  • PHP
    $lastupdate = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1")

    holt den Timestamp der letzten Aktualisierung.

  • Geht vielleicht auch einfacher über das Template Tags/the modified date « WordPress Codex

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Zitat

    ... holt den Timestamp der letzten Aktualisierung.

    Ich hätte es schreiben sollen: Ich habe nur geringe PHP-Kenntnisse. Den von mir zitierten Code habe ich irgendwo abgekupfert.

    Probiert habe ich es so ...

    [FONT=Courier New]<?php
    $lastupdate = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    print $lastupdate;
    ?>
    [/FONT]
    ... aber das bringt die Fehlermeldung:

    [FONT=Courier New][size=10][COLOR=Black]Fatal error: Call to a member function on a non-object in /home/www/blogdatum.phtml on line 35[/COLOR][/SIZE][/FONT]

    Und das sagt mir leider gar nichts.

    Verrätst Du mir die Dummie-Version?

    Danke,

    AnselmR

    Einmal editiert, zuletzt von AnselmR (18. September 2008 um 17:40)

  • PHP
    <?php
    global $wpdb;
    $lastupdate = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $formatiertesDatum = strftime('%d.%m.%Y', $lastupdate); 
    print $formatiertesDatum;
    ?>

    [FONT=Courier New]

    Kombiniert mit dem alten Skript und Bekanntmachung des $wpdb-Objekts.
    [/FONT]

  • [FONT=Courier New]
    Kombiniert mit dem alten Skript und Bekanntmachung des $wpdb-Objekts.
    [/FONT]


    [FONT=Arial][size=10][COLOR=#000080]Fatal error: Call to a member function on a non-object in /home/www/blogdatum.phtml on line 26[/COLOR][/SIZE][/FONT]

    :confused:

    Gruß, AnselmR

  • [FONT=Arial][size=10][COLOR=#000080]Fatal error: Call to a member function on a non-object in /home/www/blogdatum.phtml on line 26[/COLOR][/SIZE][/FONT]


    Ich bin noch mal in mich gegangen. War aber auch nichts los. ;-)

    Im Ernst: Zunächst hatte ich das Script in eine .phtml-Datei mit etwas HTML eingebaut. Ich hatte den Verdacht, dass das Drumherum Probleme macht und habe jetzt eine .php-Datei nur mit den PHP-Zeilen

    [FONT=Courier New]<?php
    global $wpdb;
    $lastupdate = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $formatiertesDatum = strftime('%d.%m.%Y', $lastupdate);
    print $formatiertesDatum;
    ?>
    [/FONT]
    erstellt. Damit ändert sich die Fehlermeldung in

    Fatal error: Call to a member function on a non-object in /home/www/blogdate.php on line 3

    Das ist alles.

    WordPress liegt bei mir auf /home/www/wordpress, und die HTML-Datei, die das Datum anzeigen soll, eine Etage höher.

    Entweder bin ich blind oder blöd oder ... es hat doch noch jemand die Lösung.

    Hoffnungsvoll

    AnselmR

  • WordPress liegt bei mir auf /home/www/wordpress, und die HTML-Datei, die das Datum anzeigen soll, eine Etage höher.


    Aha. Die HTML-Datei gehört also nicht zu WP, kennt also die Datenbank-Klasse von WP auch nicht. Dann musst du natürlich ein klein wenig anders rangehen:

    PHP
    $resource = mysql_query("SELECT post_modified FROM wp_posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $result = mysql_fetch_object( $resource );
    $lastmod = strftime( '%d.%m.%Y', $result->post_modified );

    Beachte dass du hier evtl. noch den DB-Präfix an deine Installation anpassen musst. ich setze mal voraus, dass bereits eine DB-Verbindung steht, ansonsten musst du diese natürlich vorher aufbauen.

  • Aha. Die HTML-Datei gehört also nicht zu WP, kennt also die Datenbank-Klasse von WP auch nicht. Dann musst du natürlich ein klein wenig anders rangehen:

    [...]

    Beachte dass du hier evtl. noch den DB-Präfix an deine Installation anpassen musst. ich setze mal voraus, dass bereits eine DB-Verbindung steht, ansonsten musst du diese natürlich vorher aufbauen.


    Ich hatte mich schon gefreut, einfach "Danke!" schreiben zu können. Das Aufbauen der DB-Verbindung habe ich auch geschafft. mein Script sieht nun so aus:

    [FONT=Courier New]<?php
    $link = mysql_connect('127.0.0.1:3307', 'ab1234_1', 'a1B2c3D4e5);
    if (!$link) {
    die('Could not connect: ' . mysql_error());
    }
    echo 'Connected successfully';
    $resource = mysql_query("SELECT post_modified FROM wp_posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $result = mysql_fetch_object( $resource );
    $lastmod = strftime( '%d.%m.%Y', $result->post_modified );
    print $lastmod;
    mysql_close($link);
    ?>

    [/FONT](User und Passwort geändert.)

    Aber bei dieser Meldung komme ich einfach nicht weiter:

    Connected successfully
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/www/blogdate.php on line 8
    01.01.1970

    Ich geb nicht auf. Aber ein bisschen Rückenwind bräuchte ich noch.

    Gruß, Anselm

  • Nach viel Fleiß und Schweiß ist jetzt Folgendes draus geworden:

    Es kommt jetzt keine Fehlermeldung mehr, sondern

    [FONT=Courier New]Connected successfully01.01.1970[/FONT]

    Mit anderen Worten, das Datum stimmt nicht. Hat noch jemand eine Idee? Es wäre schön, wenn die ganze Mühe zum Schluss nicht umsonst gewesen wäre.

    Gruß, AnselmR

    Einmal editiert, zuletzt von AnselmR (24. September 2008 um 19:33)

  • Das hatten wir doch erst, das Problem ist wohl, dass post_modified kein Datum liefert, was strftime() umwandeln kann. Lass dir doch erstmal post_modified ausgeben, um zu sehen was da zurück kommt (und ob das das ist was du erwartest).

    Hinweis: strftime() erwartet einen Timestamp. Du kannst MySQL anweisen, dir post_modified als Timestamp zurückliefern zu lassen:
    MySQL :: MySQL 5.0 Reference Manual :: 11.6 Date and Time Functions

  • Das hatten wir doch erst, das Problem ist wohl, dass post_modified kein Datum liefert, was strftime() umwandeln kann. Lass dir doch erstmal post_modified ausgeben, um zu sehen was da zurück kommt (und ob das das ist was du erwartest).


    Sehr genau das sogar: 2008-09-23 16:02:17 :)

    Zitat

    Hinweis: strftime() erwartet einen Timestamp. Du kannst MySQL anweisen, dir post_modified als Timestamp zurückliefern zu lassen:
    MySQL :: MySQL 5.0 Reference Manual :: 11.6 Date and Time Functions

    Das allerdings ist zu hoch für mich. Ein klein bisschen Nachhilfe noch bezüglich der Umwandlung?

    Dank und Gruß,

    AnselmR

  • Das allerdings ist zu hoch für mich. Ein klein bisschen Nachhilfe noch bezüglich der Umwandlung?


    Ja na klar, kein Thema. So sollte es dann klappen:

    PHP
    $result = mysql_query("SELECT UNIX_TIMESTAMP(post_modified) as post_modified FROM wp_posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $resource = mysql_fetch_object( $result );
    $lastmod = strftime( '%d.%m.%Y', $resource->post_modified );  
    print $lastmod;
  • Ja na klar, kein Thema. So sollte es dann klappen:

    PHP
    $result = mysql_query("SELECT UNIX_TIMESTAMP(post_modified) as post_modified FROM wp_posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
    $resource = mysql_fetch_object( $result );
    $lastmod = strftime( '%d.%m.%Y', $resource->post_modified );  
    print $lastmod;


    Und das tut es auch! WordPress-Orden am Bande oder so! :D

    Danke!

    Anselm

  • Schreck in letzter Sekunde: Wenn ich das

    PHP
    $link = mysql_connect('127.0.0.1:3307', 'xxxxxx_1', 'xxxxxxxxxx');

    in die HTML-Seite einbaue, kann es jeder einfach per "Seitenquelltext anzeigen" auslesen. Kann ich das in einem geschützten Bereich unterbringen und von dort auslesen?

    (Ich gebe zu, mit WordPress hat das jetzt nicht mehr sehr viel zu tun.)

    Gruß, Anselm

  • Wenn das als PHP-Code gekennzeichnet ist und die Datei, in der es sich befindet, als PHP-File verarbeitet wird, sieht der Nutzer das im Quelltext nicht.


    Das wusste ich nicht, aber ein Blick in den Quelltext des Browsers hat mich überzeugt. Wenn man sonst nicht darauf zugreifen kann, ist ja alles bestens.

    Dir und allen, die an dieser schweren Geburt mitgewirkt haben, vielen Dank.

    Gruß, Anselm

Jetzt mitmachen!

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