WordPress-Klassen und Funktionen außerhalb der Installation verwenden

Um alle WordPress-Funktionen und Klassen auch außerhalb der WordPress-Installation verwenden zu können, muss man nur die wp-config.php in das jeweilige Script includen. In diesem Snippet erstelle ich so beispielsweise ein XML-Feed meiner Blogposts indem ich die als global deklarierte Datenbank-Klasse $wpdb nutze.

<?php include_once('wordpress/wp-config.php');
 
	function create_xml_feed(){
 
		global $wpdb, $table_prefix;
 
		$result = $wpdb->get_results('SELECT * FROM '.$table_prefix.'posts
		WHERE post_status="publish" ORDER BY ID DESC');
 
		$xml = '<?xml version="1.0" encoding="UTF-8" ?>
		<buildup>';
 
		foreach($result as $post){
			$xml .=
			'
<post id="'.$post->ID.'">
				<ID>'.$post->ID.'</ID>
<post_author><![CDATA['.$post->post_author.']]></post_author>
<post_date>'.$post->post_date.'</post_date>
<post_date_gmt>'.$post->post_date_gmt.'</post_date_gmt>
<post_content><![CDATA['.$post->post_content.']]></post_content>
<post_title><![CDATA['.$post->post_title.']]></post_title>
<post_name>'.$post->post_name.'</post_name>
<post_modified>'.$post->post_modified.'</post_modified>
<post_modified_gmt>'.$post->post_modified_gmt.'</post_modified_gmt>
				<guid>'.$post->guid.'</guid>
				<comment_count>'.$post->comment_count.'</comment_count>
			</post>';
		}
 
		file_put_contents('feed.xml', $xml.'</buildup>');
 
	}
 
?>
Als Textdatei öffnen | since1985de_e2304277.txt | 1.05 Kilobyte

7. Februar 2010

  • Eingeordnet unter: WordPress
  • keine Antworten

WordPress: Die eigene Domain als ShortURL nutzen

Gerade diejenigen unter euch, die ihre Artikel über Twitter oder andere Soziale-Netzwerke bekannt machen, greifen sicherlich häufig zu Diensten wie tinyurl.com oder bit.ly zurück um den ansonsten zu langen Hyperlinks noch etwas Text beizustellen und sie somit interessant zu machen. Doch wenn ihr WordPress nutzt, könnt ihr darauf gut und gerne verzichten. Hier zeige ich euch wie.

Umleiten: Ja – Duplicate-Content: Nein

Die folgende Funktion macht sich die WordPress-eigene URL-Struktur zu nutze. Links auf Posts lauten eigentlich immer http://example.com/index.php?p=postID – die meisten unter euch werden jedoch SEO-freundlichere Links verwenden. Trotzdem bleiben die Posts über den ursprünglichen Weg erreichbar und werden sogar permanent umgeleitet – es gibt also keinen bösen Duplicate-Content. Packt den Code-Schnipsel einfach in eure functions.php.

<?php
function shorturl(){
    global $post;
    is_single() == true ? $out = get_bloginfo('url')."/".$post->ID : $out = get_bloginfo('url')."/";
    echo $out;
}
 
/* Beispiel-Aufruf */
/* <a href="<?php shorturl(); ?>">Nutze den kurzen Link: <?php shorturl(); ?></a> */
?>
Als Textdatei öffnen | since1985de_7b29ee40.txt | 311 Byte

Die halbe Miete

Da http://example.com/index.php?p=postID auch nicht wirklich kurz ist verwenden wir noch eine mod_rewrite-Regel mit der wir das durch die Funktion erzeugte und wesentlich kürzere http://example.com/postID auf besagte URL umleiten. Dazu müsst ihr eure .htaccess um folgende Regeln erweitern.

RewriteEngine On
RewriteRule ^([0-9]+[0-9])$ /index.php?p=$1 [L]
Als Textdatei öffnen | since1985de_3411f4de.txt | 64 Byte

21. Dezember 2009

WordPress: Inhalte auf delicious.com als Lesezeichen setzen

Wer seinen Besuchern anbieten möchte Inhalte auf delicious.com als Lesezeichen zu setzen, ohne dabei auf unnötige Plugins zurückzugreifen, packt am besten den nachfolgenden Code in seine functions.php.

Die Funktion muss dann nur noch in einem Link innerhalb des href-Attributes aufgerufen werden und Besucher können deine Seite mit einem Klick auf delicious.com als Lesezeichen hinzufügen.

<?php
function delicious_link(){
 
    global $post;
    $link = get_permalink($post->ID);
    $url = 'http://del.icio.us/post?url='.urlencode($link).'&title='.urlencode($post->post_title);
    return $url;
 
}
 
// Beispiel-Link
// <a href="<?php delicious_link(); ?>" title="">auf delicious.com als Lesezeichen setzen</a>
 
?>
 
Als Textdatei öffnen | since1985de_79e9ec01.txt | 372 Byte

20. Dezember 2009

  • Eingeordnet unter: WordPress
  • keine Antworten

WordPress: Erweiterung für Code-Highlighter – Code in Textdatei kopieren

Wenn der Code den Rahmen sprengt.

Mit meinem neuen WordPress-Theme tat sich ein gewisses Problem bei der Darstellung von Quelltext auf: Die Content-Spalte war zu schmal um Code mit einer höheren Zeilenlänge vollständig anzuzeigen. Das Element daraufhin horizontal scrollbar zu machen war mir zu blöd...

Eine andere Lösung musste her!

Kurzum entschied ich mich, die überstehenden Zeilen mit der CSS-Regel overflow:hidden abzutrennen. Rein visuell war ich von dem Ergebnis überzeugt. Doch irgendwie musste ich den kompletten Code wieder frei zugänglich machen.

Warum das Rad neu erfinden?

Mir kam die Idee das WordPress-Plugin Code-Highlighter zu erweitern. Das Ergebnis ist eine Funktion die den Code ausliest, formatiert und - wenn nicht bereits vorhanden - als Textdatei speichert. Der Dateiname wird generiert aus dem md5-Hash des Code. Bereits vorhandene Dateien die aktuellen Code besitzen müssen so nicht erneut erstellt werden.

Der Code

Einfach in die functions.php in eurem Theme-Ordner kopieren und die Pfade anpassen.

<?php
function filter_codeplaintext_callback($matches) {
	$code = html_entity_decode(trim(strip_tags($matches[5]), '\r\n'));
	$hash = md5($code);
	$dir = DOC_ROOT."wordpress/wp-content/themes/since1985/media/text/code/";
	$file = $dir.$hash.".txt";
 
	!file_exists($file) ? file_put_contents($file, $code) : NULL;
 
	$url = get_bloginfo('url')."/wordpress/wp-content/themes/since1985/media/text/code/".$hash.".txt";
 
	return $matches[0]."
<ul>
<li><a href='".$url."'>Als Textdatei anzeigen</a></li>
</ul>
 
";
}
 
function filter_codeplaintext($content) {
	$pattern = '/
<pre(\s*class="([^"]*)")?(\s*lineno="([^"]*)")?>((\\n|.)*)<\/pre>/U';
	$content = preg_replace_callback($pattern, 'filter_codeplaintext_callback', $content);
	return $content;
}
 
add_filter('the_content', 'filter_codeplaintext');
?>
Als Textdatei öffnen | since1985de_fbfc25e6.txt | 851 Byte

28. November 2009