WP – Vorgeschmack auf Beiträge machen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 11 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Screenshot Post-VorschauWordPress bietet die Möglichkeit, Beiträge in der Zukunft zu veröffentlichen - ein praktisches Tool. Die Beiträge werden dann zum hinterlegten Zeitpunkt online gestellt ohne das der Autor nochmal veröffentlichen muss.
Warum sollte man eigentlich nicht diese Beiträge als Vorgeschmack nutzen, den Besucher der Site ein wenig anzufüttern und damit einen kleinen Einblick in die zukünftigen Veröffentlichungen geben. Vielleicht kommt er ja aufgrund der Artikelvorschau wieder, wenn der Beitrag online ist. Dazu bedarf es einer kleinen Abfrage aus der Datenbank und ein Vergleich mit dem aktuellen Datum. Die nötigen Zeilen stehen im folgenden bereit.


	<?php
	global $wpdb;
	$fb_date_today = current_time('mysql'); //today date GMT
	if ( $scheduled = $wpdb->get_results("SELECT ID, post_title, post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' AND post_date_gmt > '$fb_date_today' ORDER BY post_date ASC") ) : ?> 
	

Vorgesehene Beiträge

    <?php foreach ($scheduled as $post) { if ($post->post_title == '') $post->post_title = sprintf(__('Post #%s'), $post->ID); echo "
  • " . sprintf(__('%1$s in %2$s'), "$post->post_title", human_time_diff( current_time('timestamp', 1), strtotime($post->post_date_gmt. ' GMT') )) . "
  • "; } ?>
<?php endif; ?>

Update

Arbeitest Du mit einer WordPress-Version >2.1.*, so muss die SQL-Abfrage ein wenig anders aussehen - future statt puplish.


SELECT ID, post_title, post_date_gmt FROM $wpdb->posts WHERE post_status = 'future' AND post_date_gmt > '$fb_date_today' ORDER BY post_date ASC

Alternative WP-Query

Alternativ kann man das ganze auch über einen Query von WordPress steuern. Dieser Query ist für den Loop verantwortlich und läßt sich in vielerlei Form nutzen und anpassen.


<?php
$my_query = new WP_Query('post_status=future&order=DESC&showposts=5');
if ( $my_query->have_posts() ) {
	
	_e('

Vorgesehene Beiträge

'); echo '
    '; while ( $my_query->have_posts() ) : $my_query->the_post(); $do_not_duplicate = $post->ID; echo '
  • ' . get_the_title() . __(' (erscheint am ') . get_the_time('d.m.Y') . __(')') . '
  • '; endwhile; echo '
'; } ?>

31 Kommentare

  1. Sorry das ich meine Frage unter diesen Eintrag schreibe.

    Meine Frage, weißt du zufällig -als offensichtlicher WordPressguru- wie man die 100 Kategorien Sperre umgeht?

  2. Super Sache! Ich denke man muss den Code einfach an der Stelle einsetzen, an der man die Anzeige will. Also zum Beispiel in der Sidebar.

    Geht das auch bei WP 1.5 noch?

    Und noch eine Frage: Was wird angezeigt, wenn kein Artikel vorabgespeichert ist?

    Und dann wünsche ich frohe Festtage, dir und allen bueltge.de-Fans!

  3. @Burchi: nein, sorry.

    @Willi: Dazu musst du den obigen Code in dein Template einbauen.

    @Dominik: Ja, einfach einsetzen. Kein Artikel - keine Ausgabe, deshalb die IF-Abfrage. Geht auch unter WP 1.5.

  4. Schade Frank,

    wenn dir eine Lösung "über den Weg läuft", dann wäre es super, wenn du dich an mich erinnerst. 😉

    Vielleicht kannst du ja auch einen "Frage" Beitrag dazu schreiben, bei der Masse User, die bei dir vorbei schauen, dürfte es schnell eine Lösung geben.

    Wäre Super. 🙂

  5. @Burchi: Habe mir mal die DB angesehen, die prinzipiell viel mehr Kategorien zuläßt. Wie äußert sich das Problem, kenne es nicht. Kannst du mir beschreiben, wie es endet und ob du eine Hinweis bekommst.
    Gruss Frank

  6. Nein, man bekommt keinen Hinweis, man kann auch mehr Kategorien anlegen, diese lassen sich aber dann im Beitragsmodus nicht mehr anklicken.

    Manchmal werden auch Kategorien im Beitragsmodus ausgeblendet, die schon Beiträge beinhalten.

  7. Super! Hat geklappt. Einmal mehr vielen Dank.

    Noch eine Frage: Wo steckt dieses "in" im Code? ich würde das "in 19 hours" gerne abändern zu "online in 19 hours". Zudem würde ich gerne den Titel des Textes gerne etwas farblich hervorheben, z.B. blau wie die anderen sachen in meiner Sidebar.

  8. Ein klitzekleines problem: Wenn ein Beitrag in weniger als einer Stunde online gestellt wird, dann erscheint er nicht mehr. Das ist schade. Könnte man dann nicht entweder die Minuten, "less than one hour" oder einfach "

  9. Habe bisher die Zeit per php time() ausgelesen, habe nun den obigen Code verändert (die ersten beiden Zeilen), so dass auch ganz genau die gleiche Zeit, wie WP im Backend hat, ausgelesen wird. Damit werden nun auch Minuten gezeigt.

    LG Frank

  10. Habe plötzlich folgende Fehlermeldung, wenn ich einen Beitrag veröffentlichen will.
    Zitat:
    WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND p2c.category_id 55 AND p.post_date_gmt 55 AND p.post_date_gmt

  11. Hi, bei WordPress 2.1.2 funktioniert der oben genannte Code nicht. Das Problem liegt darin das dort der Post status "future" lauten muss. Nach dem man aus publish - future gemacht hat funktioniert es.

  12. Eine tolle Idee...
    Als WP-Anfänger wüsste ich gerne, in welche Datei der Code rein muss oder, noch besser, auch zwischen welche Segmente in der Datei.....?!?!?

  13. Du kannst es prinzipiell überall einbauen, wo immer es erscheinen soll. Wenn es in den Sidebar soll, dann die stidebar.php bearbeiten und den Code zwischen <li> und </li> setzen.

  14. Hoi Frank
    Seit dem Update auf WP 2.1 funktioniert der Code nicht mehr richtig. So ca. in den letzten zwei Stunden wird nichts mehr angezeigt (Habe keine Änderungen vorgenommen).

  15. Ja: get_results("SELECT ID, post_title, post_date_gmt FROM $wpdb->posts WHERE post_status = 'future' AND post_date_gmt > '$fb_date_today' ORDER BY post_date ASC") ) : ?>

  16. Ist der [2te] Code auch für die DE-Version 2.2.1 gültig und, vor allem,

    In WELCHER DATEI muss die Anpassung gemacht werden?
    (Bin noch neu im Umgang mit WP, sorry)

Kommentare sind geschlossen.