Willkommen auf BasicBlogger.de! Ein Blog für Blogger und Webentwickler...

WP-Plugin: Random Post of the day

26.May 2009 | by Ahmet Topal

Servervoice (Andi) @twitter hat mir vorgeschlagen, ein Wordpress Plugin zu programmieren, welches jeden Tag einen zufälligen Artikel aus der Datenbank z.B. auf der Sidebar anzeigt. Ich dachte, es gäbe schon so ein Plugin, aber habe nichts gefunden, daraufhin habe ich selber das kleine Plugin programmiert, mit dem Namen “Random Post of the day“.

Dieses Plugin speichert jeden Tag einen per Zufall gewählten Artikel in die Optionen Tabelle. Gleichzeitig wird auch in die selbe Optionen Tabelle ein weiterer Eintrag mit dem Zeitstempel von dem aktuellen Tag um 00:00 Uhr (mktime) gespeichert (danke @sgehrig).

Dieses kleine Code will ich nicht als Plugin anbieten, deshalb müsst ihr den Code unten kopieren, und in eure functions.php Datei des Themes einfügen und abspeichern:

<?php
/*
	Random Post of the day by Ahmet Topal, http://ahmet-topal.de/
	Informations: http://basicblogger.de/2009/05/26/wp-plugin-random-post-of-the-day/
 
	This Plugins allows you to show a Random Post of the day anywhere using <?php at_random_post(); ?>
*/
 
function at_random_post() {
	global $wpdb;
 
	// Database select a random Post
	$query = "SELECT id, post_title, post_name FROM $wpdb->posts WHERE ((post_status='publish') AND (post_type = 'post') AND ($wpdb->posts.post_password = '')) ORDER BY RAND() LIMIT 1";
	$randompost = $wpdb->get_results($query);
	$post = $randompost[0];
	$post_title = htmlspecialchars(stripslashes($post->post_title));
	$showpost .= '<a href="' . get_permalink($post->id) . '" title="'. $post_title . '">' . $post_title .'</a>' . "n";
 
	// Add Options to the Database
	add_option('at_random_post', mktime(0,0,0));
	add_option('at_get_random_post', $showpost);
 
	if(time() > get_option('at_random_post')+86400)
	{
		echo $showpost;
 
		// Update Options
		update_option('at_random_post', mktime(0,0,0));
		update_option('at_get_random_post', $showpost);
	}
	else
	{
		$showpostdb = get_option('at_get_random_post');
		echo $showpostdb;
	}
}
?>

Nutzung:

In eine Template Datei wie z.B. in die Sidebar (sidebar.php), dort wo das Zufallsartikel erscheinen soll, einfach:

<?php at_random_post(); ?>

einfügen, und die Datei abspeichern.

Information:

Ich habe als Basis das Plugin WP-Single-Random-Post benutzt, welches bei jedem Seitenaufruf einen neuen Artikel anzeigen lässt, und dies so erweitert, dass jeden Tag ein neuer erscheint, und nicht bei jedem Aufruf.

Bei Fehlern bitte via Email und bei Fragen gerne Kommentar auf diesem Artikel :)

Update:
Um noch den Content des Artikels anzuzeigen könnt ihr:

	// Database select a random Post
	$query = "SELECT id, post_title, post_name FROM $wpdb->posts WHERE ((post_status='publish') AND (post_type = 'post') AND ($wpdb->posts.post_password = '')) ORDER BY RAND() LIMIT 1";
	$randompost = $wpdb->get_results($query);
	$post = $randompost[0];
	$post_title = htmlspecialchars(stripslashes($post->post_title));
	$showpost .= '<a href="' . get_permalink($post->id) . '" title="'. $post_title . '">' . $post_title .'</a>' . "n";

zu

	// Database select a random Post
	$query = "SELECT id, post_title, post_content, post_name FROM $wpdb->posts WHERE ((post_status='publish') AND (post_type = 'post') AND ($wpdb->posts.post_password = '')) ORDER BY RAND() LIMIT 1";
	$randompost = $wpdb->get_results($query);
	$post = $randompost[0];
	$post_title = htmlspecialchars(stripslashes($post->post_title));
	$showpost .= '<a href="' . get_permalink($post->id) . '" title="'. $post_title . '">' . $post_title .'</a>' . "<br />n" .  substr(nl2br($post->post_content), 0,  200) . "...n";

ändern, hier ist 200 gleich der Anzahl der Buchstaben des Artikels…

Diesen Artikel weiterempfehlen:
  • Twitter
  • Digg
  • del.icio.us
  • Facebook
  • FriendFeed
  • MisterWong.DE
  • Technorati
  • Webnews.de
  • Wikio
  • Yigg
  • Posterous

Die freundliche Art Geld zu verdienen! Partnerlink



12 Antworten, Willst du auch was sagen?

  1. Hannes Schurig [www] sagt:

    Cool cool. Bin gerade dabei es bei mir einzubauen.
    Post mit Backlink kommt sicher noch als Dank :)

    Reply
  2. Ahmet Topal [www] sagt:

    @Hannes Schuring
    Danke, freut mich, dass es dir gefällt :)

    Reply
  3. Andi [www] sagt:

    Vielen dank das du es gecodest hast. Könntest du mir aber bitte noch sagen was ich umstellen muss damit nicht nur der Titel mit dem Link angezeigt wird sondern der Content text von dem Artikel.

    Reply
  4. Ahmet Topal [www] sagt:

    @Andi
    Achso, stimmt, siehe Update (kommt in einer Minute).

    Reply
  5. Daniel Costalis [www] sagt:

    Wonderful Idea! Thank you for the link, and I’m glad my very simple plugin was useful to you!

    Wunderbare Idee! Vielen Dank für den Link, und ich bin froh, dass meine einfache Plugin war sehr nützlich für Sie!

    Reply
  6. Crazy Girl [www] sagt:

    Ic h würde hier einfach nur die Standard Rand Option nehmen und das Ganze in einen manuellen php Cache packen, der sich alle 24 Stunden updated. Damit hat man auch die Datenbankabfragen nur noch alle 24 Stunden ;-)

    Reply
  7. Ahmet Topal [www] sagt:

    @Crazy Girl
    Die Datenbank Abfrage kannst du auch in den 24 Stunden Loop packen, dass ist auch richtig :)

    @Daniel
    I’m happy, that you like my Version, and i thank you for the Plugin, so it was easier to start for me :)

    Reply
  8. Hannes Schurig [www] sagt:

    Wird jetzt bei jedem Refresh diese Datenbankabfrage gestartet? Das ist zwar keine starke Belastung aber man könnte das doch – wir ihr da oben diskutiert – sicher umgehen oder? Nur um eetwas ressourcenschonender zu sein.

    Reply
  9. Ahmet Topal [www] sagt:

    @Hannes Schurig
    Jep das geht, dann einfach von
    // Database select a random Post
    bis
    // Add Options to the Database
    Ausschneiden und in den if reinpacken (aber gleich in die erste Zeile danach)
    wichtig ist halt nur, dass dies bei dem geht, der schon einen Tag drinn hatte, also bei dir geht dies, ansonsten bei neuinstallation (erste aktivierun) kommt dann ein error. Aber du kannst dies schon machen :)

    Reply
  10. Hannes Schurig [www] sagt:

    Maaahlzeit…
    Interessant, mach ich das mal.
    Na dann kannst du doch sicher mit ner if am Anfang abfragen, ob at_get_random_post gesetzt ist und dementsprechend verzeigen, dann gehts auch bei der Neuinstallation.
    Ey das ist doch echt Plugin-fähig. Bastel doch mal nen Frontend wo man ganz easy die Anzahl der Excerpt-Buchstaben eingeben kann, dann noch mit Checkbox für ‘passwortgeschützt Posts mit einbeziehen’ (posts.post_password dementsprechend anpassen) und son Kram.
    Dann public machen und Besucherströme abwarten ^^

    Ich muss mir gleich mal deine anderen Plugins/Funktionen angucken

    Reply
  11. Ahmet Topal [www] sagt:

    @Hannes Schurig
    Jep, stimmt sogar, dass ist eigentlich ganz easy. Muss ich machen^^

    Meine anderen Plugins sind ziemlich alt :) Die sind auch nicht so gut, aber die Funktionen, joa, die sind gut ^^Denk ich mal :D

    Reply
  12. Schon gelesen? – Ein neues Widget in meiner Sidebar // hombertho.de [www] sagt:

    [...] Widget zeigt zufällig einen Post. Dieser wird mithilfe des einfachen Code von Ahmet [...]

Hinterlasse doch bitte eine Antwort!

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
free hit counters