Support » Allgemeine Fragen » Funktion direkt oder über Shortcode aufrufen

  • Gelöst radarin

    (@radarin)


    Servus

    Ich habe eine Funktion geschrieben, welche ich mittels Shortcode in einem Widget in der Seitenleiste anzeige. Diese gibt aus, wann die letzte Änderung an der Seite statt gefunden hat.

    add_shortcode('rad-last-change', 'radLastChange');
    function radLastChange() {
      global $wpdb;
      $result = $wpdb->get_var("SELECT UNIX_TIMESTAMP(post_modified) as post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
      // Zeitzone, Sommer-/Winterzeit korrigieren (1 Stunde = 3600 Sekunden)
      $result = $result + 3600;
      // eine deutsche WP-Installation kann auch mit setlocale() englische Wochentage ausgeben.
      $weekday = strftime( '%u', $result );
      if ($weekday == 1){ $wd = "Montag";} 
      elseif ($weekday == 2){ $wd = "Dienstag";}
      elseif ($weekday == 3){ $wd = "Mittwoch";}
      elseif ($weekday == 4){ $wd = "Donnerstag";}
      elseif ($weekday == 5){ $wd = "Freitag";}
      elseif ($weekday == 6){ $wd = "Samstag";}
      elseif ($weekday == 7){ $wd = "Sonntag";}
      
      $lastmod = $wd .", ". strftime( '%d.%m.%Y - %H:%M:%S', $result );  
      return $lastmod;
    }

    Auf der Startseite habe ich die Anzeige direkt in die index-service.php integriert.

    <?php echo radLastChange(); ?>

    Funktioniert einwandfrei. Auf der Startseite will ich aber nicht ein Datum ausgeben, sondern nur ‚heute‘, ‚gestern‘ oder ‚vor 2 Tagen‘. Dafür eine weitere Funktion.

    add_shortcode('rad-last-change-today', 'radLastChangeToday');
    function radLastChangeToday($date_1 , $date_2 , $differenceFormat = '%a' ) {
      global $wpdb;
      $result = $wpdb->get_var("SELECT UNIX_TIMESTAMP(post_modified) as post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified DESC LIMIT 1");
      // Zeitzone, Sommer-/Winterzeit korrigieren (1 Stunde = 3600 Sekunden)
      $result = $result + 3600; // Timestamp letzte Aktualisierung
      $jetzt .= strtotime("now"); // Timestamp aktuelle Zeit
      // Timestamp in Datum umwandeln
      $datumVon = strftime( '%d/%m/%Y', $result );
      $datumBis = strftime( '%d/%m/%Y', $jetzt );
      // Rechenbare Formate
      $myArrayDatumVon = explode("/", $datumVon);
      $datumVon = mktime(0,0,0,$myArrayDatumVon[1],$myArrayDatumVon[0],$myArrayDatumVon[2]);
      $myArrayDatumBis = explode("/", $datumBis);
      $datumBis = mktime(0,0,0,$myArrayDatumBis[1],$myArrayDatumBis[0],$myArrayDatumBis[2]);
      // Differenz in Tagen
      $differenztage = ($datumBis-$datumVon) / (3600*24);
      // Ausgabe formatieren, heute, gestern oder vor x Tagen
      if ( $differenztage == 0 ){ $ausgabe = "heute";}
      elseif ( $differenztage == 1 ){ $ausgabe = "gestern";}
      else { $ausgabe="vor ".$differenztage." Tagen";}
      // Ausgabe
      return $ausgabe;
    }

    Funktioniert im Widget einwandfrei, auf der Startseite führt es zu einem Abbruch des Seitenaufbaus, ohne Erkennbares im Quellcode.

    Macht für mich einfach keinen Sinn.

    Gruß René

    • Dieses Thema wurde geändert vor 5 Jahren, 1 Monat von radarin.
Ansicht von 1 Antwort (von insgesamt 1)
  • Thread-Starter radarin

    (@radarin)

    Ich konnte das Problem lösen. Aus

    function radLastChangeToday($date_1 , $date_2 , $differenceFormat = '%a' ) {

    wurde

    function radLastChangeToday() {

    Ich hab das so aus einer Vorlage übernommen. Die entfernten Variablen komplett unnötig. Jetzt funktioniert die Funktion weiterhin über einen Shortcode und mittels direktem Aufruf in der PHP-Datei.

    Weshalb das vorher via Shortcode funktionierte, aber direkt nicht, ist mir weiterhin schleierhaft, aber Hauptsache es funktioniert jetzt so wie es soll. Es wird mir jetzt angezeigt, seit 5 Tagen keine Änderung. Zeit einen neuen Beitrag zu veröffentlichen.

Ansicht von 1 Antwort (von insgesamt 1)
  • Das Thema „Funktion direkt oder über Shortcode aufrufen“ ist für neue Antworten geschlossen.