WordPress 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 '
';
}
?>
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?
Wo gibt es diese Funktion?
Vielen Dank! Genau sowas hat mir noch gefehlt! 😉
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!
@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.
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. 🙂
@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
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.
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.
Hervorheben geht per CSS – echp „<li … .
Die Texte kommen in diesem Script von der Sprachdatei, also der mo, die man über die po (http://wordpress-deutschland.org/download/sprachdatei) anpassen kann.
Sehr guter Beitrag mal wieder. Solche Tipps sind immer nuetzlich.
Alex
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 „
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
Vielen Dank.
Danke Frank, Du sorgst mit Deinen super Hilfestellungen noch dafür, dass mir „programmieren“ richtig Spass macht!
LG Frank
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
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.
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…..?!?!?
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.
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).
@Dominik: Die SQL-Anweisung angepasst?, die muss seit 2.1 ein wenig anders aussehen, siehe Update im Artikel. Dann sollte es klappen.
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“) ) : ?>
Hy Dominik, sieht korrekt aus. gebe doch mal per echo $fb_date_today den Zeitstempel aus, ob der richtig ist und dann kann man vergleichen.
Das verstehe ich nicht. was muss ich tun?
Die Variable $fb_date_today ausgeben, dazu:
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)
ja. je nach dem, wo es hin soll. Sidebar –> sidebar.php.
Hi,
auch bei WordPress 2.5 muss man was ändern, diesmal muss „future“ mit „pending“ ersetz werden.