PDF-Export bei Wordpress

Es gibt zahlreiche Plugins für Wordpress, um Artikel in eine Druckversion umzuwandeln. Tatsächlich haben die meisten ein paar Haken: Sie sind nur auf Posts beschränkt, können das Archiv nicht drucken, andere die Startseite nicht. Hin und wieder wird stattdessen daher PDFmyURL empfohlen als Druckansicht-Generator_in. Dabei wandelt PDFmyURL eine URL in ein querformatiges, teilweise merkwürdich gebrochenes PDF um, allerdings so exakt wie ein Screenshot, fast. Denn auch PDFmyURL scheitert an einigen Wordpress-Seiten, unter anderem an der Startseite oder Tags. Das kann weit gehend mit einer Funktion umgangen werden, die ich gleich erläutern werden. Allerdings scheitert sie an Umlauten udn Sonderzeichen, vielleicht hat da jemenschd noch einen Tipp für mich, wie ich das verbessern kann?

In der functions.php in …/wp-content/themes/default/ (oder wo das verwendete Theme liegt) wird in der sechsten Zeile eine neue Funktion eingefügt, die hier pdfprint() heißt (auch ein anderer Name wäre möglich):


// PDF-DRUCKANSICHT
// Autor_in: Gnurpsnewoel
// gnurpsnewoel.blogsport.de

function pdfprint()
{

Anschließend wird eine if-else-Verzweigung geöffnet; die Funktion prüft also die einzelnen Bedingungen durch. Die Bedingungen ist dabei, ob ein bestimmter Seitentyp des Themes geöffnet ist. Am Ende jeder Verzweigung wird die URL der Seite in der Variable $printurl gespeichert. Ist die WP-Startseite aufgerufen (is_home), wird die Startseiten-URL mit der Funktion get_option(‚home‘) aufgerufen und mit /index.php ergänzt, da PDFmyURL eine komplette URL erwartet und an einer Verzeichnis-URL scheitert.


if (is_home())
{
	$printurl = get_option('home').'/index.php';
}

Andernfalls wird zunächst die URL einer Suchanfrage der Wordpress-Standardsuche ausgelesen werden (is_search). Der Suchbegriff, der in das Suchfeld eingegeben wurde, kann über die Funktion get_search_query() ausgelesen werden und wird in der Variable $searchitem gespeichert. Da hier jedoch Leerzeichen enthalten sind, in der URL jedoch Pluszeichen, müssen diese über die PHP-Funktion array() umgewandelt werden; auch hier speichert eine Variable $plussign die Funktionsaufgabe. Es soll ja der in $searchitem gespeicherte Suchbegriff umgewandelt werden. Die PHP-Funktion strtr() bringt die beiden Variablen zusammen und wandelt die Leerzeichen im Suchbegriff in Pluszeichen um. Das Ergebnis wird in der Variable $searchplus gespeichtert. Der nächste Schritt soll mit rawurlencode alle Sonderzeichen in Unicode umwandeln und in der Variable $searchstring speichern. (Es sei darauf hingewiesen, dass die Interaktion mit PDFmyURL hier nicht funktioniert. Wird auf deren Webseite die URL mit Unicode-Sonderzeichen in deren Umwandlungsmaske eingegeben, geht’s aber, sodass ich das Problem nicht verstehe.) $searchstring wird der WP-Startseiten-URL zusammen mit dem Suchparameter s angefügt.

Beispiel-Suchwortwort: „Hallo Wält“; $searchitem=‘Hallo Wält‘; $searchplus=‘Hallo+Wält‘; $searchstring=‘Hallo+W%C3%A4lt‘; $printurl=‘http://deinwordpress.blog/?s=Hallo+W%C3%A4lt‘.


elseif (is_search())
{
	$searchitem =  get_search_query();
	$plussign = array(" " => "+");
	$searchplus = strtr($searchitem,$plussign);
	$searchstring = rawurlencode($searchplus);
	$printurl = get_option('home').'/?s='.$searchstring;
}

Andernfalls wird zunächst die URL einesSchlagwortes (Tag) ausgelesen werden (is_tag). Der Tag kann über die Funktion single_tag_title() ausgelesen werden und wird in der Variable $tagsname gespeichert. Zumnächst werrden alle Zeichen in Kleinbuchstaben umgewandelt mittels der PHP-Funktion strtolower() und in der Variable $taglower gespeichert werden. Da hier Leerzeichen enthalten sind, in der URL jedoch Bindestriche, müssen diese über die PHP-Funktion array() umgewandelt werden; auch hier speichert eine Variable $hyphensign die Funktionsaufgabe. Es soll ja der in $taglower gespeicherte String umgewandelt werden. Die PHP-Funktion strtr() bringt die beiden Variablen zusammen und wandelt die Leerzeichen im Suchbegriff in Bindestriche um. Das Ergebnis wird in der Variable $taghyphen gespeichtert. Der nächste Schritt soll mit rawurlencode alle Sonderzeichen in Unicode umwandeln und in der Variable $tagspecial speichern. (Es sei darauf hingewiesen, dass die Interaktion mit PDFmyURL hier nicht funktioniert. Wird auf deren Webseite die URL mit Unicode-Sonderzeichen in deren Umwandlungsmaske eingegeben, geht’s aber, sodass ich das Problem nicht verstehe.) $tagspecial wird der WP-Startseiten-URL zusammen mit dem Suchparameter s angefügt.


elseif (is_tag())
{
	$tagsname = single_tag_title('',false);
	$taglower = strtolower($tagsname);	
	$hyphensign = array(" " => "-");
	$taghyphen = strtr($taglower,$hyphensign);
	$tagspecial = rawurlencode($taghyphen);
	$printurl = get_option('home').'/?tag='.$tagspecial;
}

Für Archive wurde hier ein Monatsarchiv gewählt. Das Monatsdatum wird via die Funktion get_the_time ausgelesen, für den März 2010 nach dem Prinzip ‚Ym‘ zum Beispiel ‚201003′. Dieser wird an die URL angehangen.


elseif (is_date())
{
	$archivemonth = get_the_time(Ym);
	$printurl = get_option('home').'/?m='.$archivemonth;
}

Bei einer Kategorie soll der Titel der Kategorie single_cat_title() ausgelesen und in $catsname gespeichert werden. Der Name wird nun mittels get_cat_id($var) in eine numerische Kategorie-ID umgewandelt. Diese wird in der URL gespeichert.


elseif (is_category())
{
	$catsname = single_cat_title('', false);
	$catsid = get_cat_id($catsname);
	$printurl = get_option('home').'/?cat='.$catsid;
}

Wenn all das nicht zutrifft (z.B. bei Seiten is_page() oder Posts is_single()), dann wird einfach der Permalink gespeichert.


else
{
	$printurl = the_permalink();
}

Die durch verschiedene Verzweigungen ermittelte $printurl soll nun ausgegeben werden. Die Funktion endete hiermit.


echo $printurl;
}

Im (X)HTML-Dokument, beispielsweise in der Navi (header.php) oder in der Metanavi (footer.php) wird die URL nun mit PDFmyURL vervollständigt. Beispiel:


<a href="http://pdfmyurl.com?url=< ?php pdfprint();?>" 
  title="externer Link zu PDFmyURL.com">Linktext</a>

W3C-unkonform kann im <a>-Link das Attributs target=“_blank“ ergänzt werden, wie mitunter empfohlen wird. Es funktioniert aber auch ohne und daher rate ich davon ab; es gibt keinen Grund, hier W3C-inkonformen Code zu basteln.

Verbesserungsvorschläge willkommen, Kritik super! Die Funktion kann als ZIP-Datei heruntergeladen werden.

Text: Creative Commons by-nc-sa 3.0


0 Antworten auf „PDF-Export bei Wordpress“


  1. Keine Kommentare

Antwort hinterlassen

XHTML: Du kannst diese Tags benutzen: <a href=""> <abbr title=""> <acronym title=""> <b> <blockquote> <code> <em> <i> <strike> <strong>


+ drei = sechs