Aprilscherz: Post-mortem

Ja, schon wieder ein dummer Titel, ich weiß…

Nach dem ja nun wohl jeder begriffen hat, das mein letzter Post ein Aprilscherz war, interessiert den einen oder anderen ja vielleicht auch die Technik dahinter. Die ist nämlich ziemlich interessant.

Die erste Frage war, wie komme ich an die Posts meines Blogs. Als erstes hatte ich überlegt einfach die letzten fünf fest in die Seite einzubauen, aber das fand ich dann doch langweilig. Dann erinnerte ich mich daran, das ich mal etwas über die wp-load-php gelesen hatte. Wenn man diese Datei in ein PHP-Script einbaut, wird WordPress komplett geladen, aber ohne eine Ausgabe zu erzeugen. Jetzt kann man quasi ein WordPress Theme nachbauen. Der folgende Code steckt hinter der Seite:


<?php

define('WP_USE_THEMES', false);
require_once "../wp-load.php";

query_posts('showposts=5');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?php bloginfo('name'); ?></title>
</head>
<body>
<h1><?php bloginfo('name'); ?></h1>
<h3><?php bloginfo('description'); ?></h3>
<hr />

<?php $date = getdate();
if($date['mday'] > 1)
{
echo '<p style="color:red">Das war natürlich ein kleiner April-Scherz. Details zur
Implementierung werde ich denächst in meinem Blog veröffentlichen.</p>';
}
?>

<?php while (have_posts()): the_post(); ?>
     <h2><?php the_title(); ?></h2>
     <p>Inhalt: <br />
	 <img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=<?php echo urlencode(get_the_content()); ?>" /></p>
     <p>Link zum Volltext: <img src="https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=<?php echo urlencode(get_permalink()); ?>"></p>
<?php endwhile; ?>

</body>
</html>

Der interessante Teil steht ganz oben:


<;php

define('WP_USE_THEMES', false);
require_once "../wp/wp-load.php"

query_posts('showposts=5');
?>

Damit wird erst Mal eine Konstante definiert, die WP anweist keine Themes zu benutzen (denn das brauchen wir ja eh nicht), danach wird WordPress durch das require_once geladen. Man könnte hier noch mit einem define(‚SHORTINIT‘, true) experimentieren, das weißt WP an, noch weniger zu laden, aber ich bin mir nicht sicher ob das reicht. Um Datenbankzugang etc. muss man sich nicht kümmern, das läuft alles über WordPress. Einzig einen query muss man noch starten, damit WordPress Posts aus der Datenbank lädt. Hier werden einfach die letzten 5 geladen.

Jetzt kann man eine Schleife über alle Posts starten und in der Schleife dann, wie in einem Theme auf alle Eigenschaften des Posts zugreifen:


<?php while (have_posts()): the_post(); ?>
     <h2><?php the_title(); ?></h2>
     <p>Inhalt: <br />
	 <?php the_content(); ?></p>
     <p>Link zum Volltext: <?php the_permalink(); ?></p>
<?php endwhile; ?>

Wenn man oben noch ein get_header() und unten noch ein get_footer() einbaut hat man praktisch das komplette Look-and-Feel des Blogs nachgebaut.

Damit ist das wichtigste schon mal erledigt. Fehlten nur noch die QR-Codes. Da kann man sich zum Glück auf Google verlassen: Über die Chart-API kommt man extrem leicht an solche Codes, einfach in dem man ein Bild nach diesem Schema einbindet:


<img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl="der tolle Text" />

chs ist die Größe des Codes, chl der Inhalt, der natürlich unlencod’et sein muss. Danke Google 😉

Bleibt nur noch das Bild meines Blogs (ja auch daran gibt es etwas besonderes :)). Das ganze ist natürlich mit GIMP manipuliert, keine Frage, aber der Header oben ist besonders. Er besteht einfach nur aus zwei QR-Codes, die mit dem Filter „Schlagschatten“ versehen wurden und dann passend zurecht geschnitten wurden. Ich finde das sieht richtig gut aus, und dabei ist es so ein einfacher Filter… Den sollte man sich echt mal merken.

Diese Bastelei hat mir mal wieder gezeigt, wie toll WordPress ist: Mit einer eingebundenen Datei kann man die kompletten WordPress Funktionen nutzen, ohne ein Theme oder ähnliches anzuzeigen. Wirklich praktisch, und definitiv schneller als selber per SQL an die Datenbank ranzugehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert