<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>bueltge.de [by:ltge.de] &#187; WP2.8</title>
	<atom:link href="http://bueltge.de/tag/wp28/feed/" rel="self" type="application/rss+xml" />
	<link>http://bueltge.de</link>
	<description>Frank Bültge schreibt auf bueltge.de zu den Themen Webentwicklung &#38; design, WordPress, Literatur und andere Themen bezüglich Internet und Development</description>
	<lastBuildDate>Mon, 06 Feb 2012 12:19:43 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dateitypen für die Mediathek freigeben</title>
		<link>http://bueltge.de/dateitypen-fuer-die-mediathek-freigeben/1011/</link>
		<comments>http://bueltge.de/dateitypen-fuer-die-mediathek-freigeben/1011/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 04:52:08 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1011</guid>
		<description><![CDATA[Mit WordPress 2.8.5 wird die Whitelist der erlaubten Mime-Typen für Downloads erstmalig auch für Administratoren gültig. Dies ist ein Schritt in Richtung Sicherheit und wird im <a href="http://talkpress.de/artikel/wordpress-2-8-5-sichere-mediathek">Artikel von Robert</a> hinreichend erklärt.
Robert zeigt auch, dass man mit Hilfe einer Konstanten die Möglichkeit alle Datentypen zu uploaden eröffnen kann.]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 2.8.5 wird die Whitelist der erlaubten Mime-Typen für Downloads erstmalig auch für Administratoren gültig. Dies ist ein Schritt in Richtung Sicherheit und wird im <a href="http://talkpress.de/artikel/wordpress-2-8-5-sichere-mediathek">Artikel von Robert</a> hinreichend erklärt.<br />
Robert zeigt auch, dass man mit Hilfe einer Konstanten die Möglichkeit alle Datentypen zu uploaden eröffnen kann.<br />
<code>define ('ALLOW_UNFILTERED_UPLOADS', true);</code></p>
<p>Wer aber im Vorfeld schon diverse Projekte mit WordPress umgesetzt hat und das Problem hatte, dass User nicht über die Rechte zum Upload eines bestimmten Formates besaßen, der musste sich auch da was einfallen lassen.</p>
<p>In vielen Fällen wurde dazu via Plugin <a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">Role Manager</a> der Upload aller Mime Typen erlaubt. Aus meiner Sicht nicht der richtige Weg und daher im folgenden ein kleiner Code-Schnipsel, der das Anpassen an die jeweilige Anforderung übernimmt.<br />
<span id="more-1011"></span><br />
<img class="centered" src="http://bueltge.de/wp-content/images/wp/upload-filter.png" alt="Screenshot Mediathek" /></p>
<p>Alle erlaubten Typen findet man in der Whitelist-Funktion <code>wp_check_filetype()</code>, in <code>wp-includes/functions.php</code>.<br />
Diese Funktion besitzt einen Filter <code>upload_mimes</code>, den man erweitern kann. Und dort setzen wir an und geben die Mime Typen mit, die wir benötigen. Im folgenden Beispiel erlaube ich dabei php-, xhtml- und htaccess-Files. Die Möglichkeiten werden in einem Array übergeben und die Zuordnung ist wichtig, damit WordPress auch ein Icon zuordnen kann, siehe Screenshot.</p>
<pre><code>
function my_upload_mimes() {
	$mime_types = array(
		'php|phps'   =&gt; 'text/php',
		'xhtm|xhtml' =&gt; 'text/html',
		'htaccess'    =&gt; 'text/plain'
	);

	return $mime_types;
}

add_filter( 'upload_mimes', 'my_upload_mimes' );
</code></pre>
<h4>Mime Typen</h4>
<p>Um eine Übersicht aller Mime-Typen zu erhalten, kann gern die folgenden Liste genutzt werden. Die Übergabe an WordPress sollte aber nur die enthalten, die man auch explizit braucht, ansonsten kann die obige Konstante genutzt geben.</p>
<pre><code>
$mime_types = array(
'323'     =&gt; 'text/h323',
'acx'     =&gt; 'application/internet-property-stream',
'ai'      =&gt; 'application/postscript',
'aif'     =&gt; 'audio/x-aiff',
'aifc'    =&gt; 'audio/x-aiff',
'aiff'    =&gt; 'audio/x-aiff',
'asf'     =&gt; 'video/x-ms-asf',
'asr'     =&gt; 'video/x-ms-asf',
'asx'     =&gt; 'video/x-ms-asf',
'au'      =&gt; 'audio/basic',
'avi'     =&gt; 'video/x-msvideo',
'axs'     =&gt; 'application/olescript',
'bas'     =&gt; 'text/plain',
'bcpio'   =&gt; 'application/x-bcpio',
'bin'     =&gt; 'application/octet-stream',
'bmp'     =&gt; 'image/bmp',
'c'       =&gt; 'text/plain',
'cat'     =&gt; 'application/vnd.ms-pkiseccat',
'cdf'     =&gt; 'application/x-cdf',
'cer'     =&gt; 'application/x-x509-ca-cert',
'class'   =&gt; 'application/octet-stream',
'clp'     =&gt; 'application/x-msclip',
'cmx'     =&gt; 'image/x-cmx',
'cod'     =&gt; 'image/cis-cod',
'cpio'    =&gt; 'application/x-cpio',
'crd'     =&gt; 'application/x-mscardfile',
'crl'     =&gt; 'application/pkix-crl',
'crt'     =&gt; 'application/x-x509-ca-cert',
'csh'     =&gt; 'application/x-csh',
'css'     =&gt; 'text/css',
'dcr'     =&gt; 'application/x-director',
'der'     =&gt; 'application/x-x509-ca-cert',
'dir'     =&gt; 'application/x-director',
'dll'     =&gt; 'application/x-msdownload',
'dms'     =&gt; 'application/octet-stream',
'doc'     =&gt; 'application/msword',
'dot'     =&gt; 'application/msword',
'dvi'     =&gt; 'application/x-dvi',
'dxr'     =&gt; 'application/x-director',
'eps'     =&gt; 'application/postscript',
'etx'     =&gt; 'text/x-setext',
'evy'     =&gt; 'application/envoy',
'exe'     =&gt; 'application/octet-stream',
'fif'     =&gt; 'application/fractals',
'flr'     =&gt; 'x-world/x-vrml',
'gif'     =&gt; 'image/gif',
'gtar'    =&gt; 'application/x-gtar',
'gz'      =&gt; 'application/x-gzip',
'h'       =&gt; 'text/plain',
'hdf'     =&gt; 'application/x-hdf',
'hlp'     =&gt; 'application/winhlp',
'hqx'     =&gt; 'application/mac-binhex40',
'hta'     =&gt; 'application/hta',
'htc'     =&gt; 'text/x-component',
'htm'     =&gt; 'text/html',
'html'    =&gt; 'text/html',
'htt'     =&gt; 'text/webviewhtml',
'ico'     =&gt; 'image/x-icon',
'ief'     =&gt; 'image/ief',
'iii'     =&gt; 'application/x-iphone',
'ins'     =&gt; 'application/x-internet-signup',
'isp'     =&gt; 'application/x-internet-signup',
'jfif'    =&gt; 'image/pipeg',
'jpe'     =&gt; 'image/jpeg',
'jpeg'    =&gt; 'image/jpeg',
'jpg'     =&gt; 'image/jpeg',
'js'      =&gt; 'application/x-javascript',
'latex'   =&gt; 'application/x-latex',
'lha'     =&gt; 'application/octet-stream',
'lsf'     =&gt; 'video/x-la-asf',
'lsx'     =&gt; 'video/x-la-asf',
'lzh'     =&gt; 'application/octet-stream',
'm13'     =&gt; 'application/x-msmediaview',
'm14'     =&gt; 'application/x-msmediaview',
'm3u'     =&gt; 'audio/x-mpegurl',
'man'     =&gt; 'application/x-troff-man',
'mdb'     =&gt; 'application/x-msaccess',
'me'      =&gt; 'application/x-troff-me',
'mht'     =&gt; 'message/rfc822',
'mhtml'   =&gt; 'message/rfc822',
'mid'     =&gt; 'audio/mid',
'mny'     =&gt; 'application/x-msmoney',
'mov'     =&gt; 'video/quicktime',
'movie'   =&gt; 'video/x-sgi-movie',
'mp2'     =&gt; 'video/mpeg',
'mp3'     =&gt; 'audio/mpeg',
'mpa'     =&gt; 'video/mpeg',
'mpe'     =&gt; 'video/mpeg',
'mpeg'    =&gt; 'video/mpeg',
'mpg'     =&gt; 'video/mpeg',
'mpp'     =&gt; 'application/vnd.ms-project',
'mpv2'    =&gt; 'video/mpeg',
'ms'      =&gt; 'application/x-troff-ms',
'mvb'     =&gt; 'application/x-msmediaview',
'nws'     =&gt; 'message/rfc822',
'oda'     =&gt; 'application/oda',
'p10'     =&gt; 'application/pkcs10',
'p12'     =&gt; 'application/x-pkcs12',
'p7b'     =&gt; 'application/x-pkcs7-certificates',
'p7c'     =&gt; 'application/x-pkcs7-mime',
'p7m'     =&gt; 'application/x-pkcs7-mime',
'p7r'     =&gt; 'application/x-pkcs7-certreqresp',
'p7s'     =&gt; 'application/x-pkcs7-signature',
'pbm'     =&gt; 'image/x-portable-bitmap',
'pdf'     =&gt; 'application/pdf',
'pfx'     =&gt; 'application/x-pkcs12',
'pgm'     =&gt; 'image/x-portable-graymap',
'pko'     =&gt; 'application/ynd.ms-pkipko',
'pma'     =&gt; 'application/x-perfmon',
'pmc'     =&gt; 'application/x-perfmon',
'pml'     =&gt; 'application/x-perfmon',
'pmr'     =&gt; 'application/x-perfmon',
'pmw'     =&gt; 'application/x-perfmon',
'pnm'     =&gt; 'image/x-portable-anymap',
'pot'     =&gt; 'application/vnd.ms-powerpoint',
'ppm'     =&gt; 'image/x-portable-pixmap',
'pps'     =&gt; 'application/vnd.ms-powerpoint',
'ppt'     =&gt; 'application/vnd.ms-powerpoint',
'prf'     =&gt; 'application/pics-rules',
'ps'      =&gt; 'application/postscript',
'pub'     =&gt; 'application/x-mspublisher',
'qt'      =&gt; 'video/quicktime',
'ra'      =&gt; 'audio/x-pn-realaudio',
'ram'     =&gt; 'audio/x-pn-realaudio',
'ras'     =&gt; 'image/x-cmu-raster',
'rgb'     =&gt; 'image/x-rgb',
'rmi'     =&gt; 'audio/mid',
'roff'    =&gt; 'application/x-troff',
'rtf'     =&gt; 'application/rtf',
'rtx'     =&gt; 'text/richtext',
'scd'     =&gt; 'application/x-msschedule',
'sct'     =&gt; 'text/scriptlet',
'setpay'  =&gt; 'application/set-payment-initiation',
'setreg'  =&gt; 'application/set-registration-initiation',
'sh'      =&gt; 'application/x-sh',
'shar'    =&gt; 'application/x-shar',
'sit'     =&gt; 'application/x-stuffit',
'snd'     =&gt; 'audio/basic',
'spc'     =&gt; 'application/x-pkcs7-certificates',
'spl'     =&gt; 'application/futuresplash',
'src'     =&gt; 'application/x-wais-source',
'sst'     =&gt; 'application/vnd.ms-pkicertstore',
'stl'     =&gt; 'application/vnd.ms-pkistl',
'stm'     =&gt; 'text/html',
'svg'     =&gt; 'image/svg+xml',
'sv4cpio' =&gt; 'application/x-sv4cpio',
'sv4crc'  =&gt; 'application/x-sv4crc',
't'       =&gt; 'application/x-troff',
'tar'     =&gt; 'application/x-tar',
'tcl'     =&gt; 'application/x-tcl',
'tex'     =&gt; 'application/x-tex',
'texi'    =&gt; 'application/x-texinfo',
'texinfo' =&gt; 'application/x-texinfo',
'tgz'     =&gt; 'application/x-compressed',
'tif'     =&gt; 'image/tiff',
'tiff'    =&gt; 'image/tiff',
'tr'      =&gt; 'application/x-troff',
'trm'     =&gt; 'application/x-msterminal',
'tsv'     =&gt; 'text/tab-separated-values',
'txt'     =&gt; 'text/plain',
'uls'     =&gt; 'text/iuls',
'ustar'   =&gt; 'application/x-ustar',
'vcf'     =&gt; 'text/x-vcard',
'vrml'    =&gt; 'x-world/x-vrml',
'wav'     =&gt; 'audio/x-wav',
'wcm'     =&gt; 'application/vnd.ms-works',
'wdb'     =&gt; 'application/vnd.ms-works',
'wks'     =&gt; 'application/vnd.ms-works',
'wmf'     =&gt; 'application/x-msmetafile',
'wps'     =&gt; 'application/vnd.ms-works',
'wri'     =&gt; 'application/x-mswrite',
'wrl'     =&gt; 'x-world/x-vrml',
'wrz'     =&gt; 'x-world/x-vrml',
'xaf'     =&gt; 'x-world/x-vrml',
'xbm'     =&gt; 'image/x-xbitmap',
'xla'     =&gt; 'application/vnd.ms-excel',
'xlc'     =&gt; 'application/vnd.ms-excel',
'xlm'     =&gt; 'application/vnd.ms-excel',
'xls'     =&gt; 'application/vnd.ms-excel',
'xlt'     =&gt; 'application/vnd.ms-excel',
'xlw'     =&gt; 'application/vnd.ms-excel',
'xof'     =&gt; 'x-world/x-vrml',
'xpm'     =&gt; 'image/x-xpixmap',
'xwd'     =&gt; 'image/x-xwindowdump',
'z'       =&gt; 'application/x-compress',
'zip'     =&gt; 'application/zip'
);
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/dateitypen-fuer-die-mediathek-freigeben/1011/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/dateitypen-fuer-die-mediathek-freigeben/1011/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/upload-filter.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/upload-filter.png" medium="image">
			<media:title type="html">Screenshot Mediathek</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Standard Widgets deaktivieren</title>
		<link>http://bueltge.de/wordpress-standard-widgets-deaktivieren/1005/</link>
		<comments>http://bueltge.de/wordpress-standard-widgets-deaktivieren/1005/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 21:34:15 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1005</guid>
		<description><![CDATA[Nicht immer möchte man alle Widgets, die der WordPress Core so mitbringt, im Theme aktiv haben. Das haben sich auch die Entwickler von WordPress gedacht und eine entsprechende Funktion mitgeliefert anstatt die Widgets in ein Plugin, gern auch als Core Plugin, ausgelagert.

Für Theme-Autoren bleibt nur der Weg, in die <code>functions.php</code> des Themes eine kleine Funktion abzulegen, die die Widgets, welche man nicht mag, deaktiviert. Der folgende Syntax schaltet alle Standard-Widgets ab. Er sollte daher angepasst werden, je nach Anforderung.]]></description>
			<content:encoded><![CDATA[<p>Nicht immer möchte man alle Widgets, die der WordPress Core so mitbringt, im Theme aktiv haben. Das haben sich auch die Entwickler von WordPress gedacht und eine entsprechende Funktion mitgeliefert anstatt die Widgets in ein Plugin, gern auch als Core Plugin, ausgelagert.</p>
<p>Für Theme-Autoren bleibt nur der Weg, in die <code>functions.php</code> des Themes eine kleine Funktion abzulegen, die die Widgets, welche man nicht mag, deaktiviert. Der folgende Syntax schaltet alle Standard-Widgets ab. Er sollte daher angepasst werden, je nach Anforderung.<br />
<span id="more-1005"></span></p>
<pre><code>
// unregister all default WP Widgets
function unregister_default_wp_widgets() {

	unregister_widget('WP_Widget_Pages');

	unregister_widget('WP_Widget_Calendar');

	unregister_widget('WP_Widget_Archives');

	unregister_widget('WP_Widget_Links');

	unregister_widget('WP_Widget_Meta');

	unregister_widget('WP_Widget_Search');

	unregister_widget('WP_Widget_Text');

	unregister_widget('WP_Widget_Categories');

	unregister_widget('WP_Widget_Recent_Posts');

	unregister_widget('WP_Widget_Recent_Comments');

	unregister_widget('WP_Widget_RSS');

	unregister_widget('WP_Widget_Tag_Cloud');
}

add_action('widgets_init', 'unregister_default_wp_widgets', 1);
</code></pre>
<p>Die Funktion <code>unregister_widget()</code> benötigt als Parameter die Übergabe der Klasse, damit ist der Code hier nur ab Version 2.8 nutzbar, im Vorfeld wurden Widgets anders unterstützt.</p>
<p>Wie man eigene Widgets ab WordPress Version 2.8 erstellt, kann man beispielsweise im Beitrag <a href="http://dynamicinternet.eu/blog/2009-03-31/wordpress-28-widget-erstellen/">WordPress 2.8 Widget erstellen</a> von Micha nachlesen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-standard-widgets-deaktivieren/1005/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-standard-widgets-deaktivieren/1005/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Meta Links bei WordPress Plugins</title>
		<link>http://bueltge.de/meta-links-bei-wordpress-plugins/950/</link>
		<comments>http://bueltge.de/meta-links-bei-wordpress-plugins/950/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 12:22:08 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=950</guid>
		<description><![CDATA[In der Vergangenheit habe ich schon im Artikel &#8222;<a href="http://bueltge.de/wordpress-plugins-bereichern/811/">WordPress Plugins bereichern</a>&#8220; erläutert, wie man Plugins um einige nützliche Funktionen erweitert und so die Nutzung optimiert. Dabei gib es unter anderem um den Absprung mit Hilfe eines einfachen Links zur Options-Seite des Plugins.
Mit WordPress 2.8 wird die Plugin-Seite ein wenig verändert sein und so gibt es einen Hook, den man bequem mit dem Link befüllen kann und den Komfort ein wenig erhöht.]]></description>
			<content:encoded><![CDATA[<p>In der Vergangenheit habe ich schon im Artikel &#8222;<a href="http://bueltge.de/wordpress-plugins-bereichern/811/">WordPress Plugins bereichern</a>&#8220; erläutert, wie man Plugins um einige nützliche Funktionen erweitert und so die Nutzung optimiert. Dabei gib es unter anderem um den Absprung mit Hilfe eines einfachen Links zur Options-Seite des Plugins.<br />
Mit WordPress 2.8 wird die Plugin-Seite ein wenig verändert sein und so gibt es einen Hook, den man bequem mit dem Link befüllen kann und den Komfort ein wenig erhöht.<br />
<span id="more-950"></span><br />
Die Möglichkeit, die hier im Tutorial erklärt wird, klappt erst ab Version 2.8 von WordPress, in der Version 2.7 musste das anders geschehen, dazu dient der schon erwähnte Artikel &#8222;<a href="http://bueltge.de/wordpress-plugins-bereichern/811/">WordPress Plugins bereichern</a>&#8220; oder ohne große Erklärung der folgende Schnipsel.</p>
<pre><code>
/**
 * @version WP 2.7
 * Add action link(s) to plugins page
 */
function set_plugin_meta27($links) {

	$plugin = plugin_basename(__FILE__);

	$settings_link = sprintf( '&lt;a href=&quot;options-general.php?page=%s&quot;&gt;%s&lt;/a&gt;', $plugin, __('Settings') );
	array_unshift( $links, $settings_link );

	return $links;
}

add_filter( 'plugin_action_links_' . $plugin, 'set_plugin_meta27' );
</code></pre>
<p>Ab Version 2.8 sieht das Backend leicht verändert aus und so werden auch die Meta Links zu Plugins anders präsentiert. Dazu gibt es aber einen Hook, so dass man den Inhalt zu den Plugins und die Links zum Plugin selbst erweitern kann. Der folgende Screenshot sollte das verdeutlichen.</p>
<p><a href="http://bueltge.de/wp-content/images/wp28/28_plugin_meta_link.png" title="Klick für Zoom"><img class="centered" src="http://bueltge.de/wp-content/images/wp28/28_plugin_meta_link-thumb.png" alt="Screenshot Beispiel Link am Plugin" title="Screenshot eines Beispiel-Link am Plugin in der Plugin-Site des WordPress Backend" /></a></p>
<p>Um nun den Link zur Options-Site zu setzen, dient der folgenden Code, der die URL des Links aus den Plugin-Daten nutzt und der Begriff &#8222;Settings&#8220; muss in dem Fall nicht für die Mehrsprachigkeit erweitert werden, da er im Sprachpaket von WordPress dabei ist und somit automatisch beim Umstellen des Backend auf eine neue Sprache übersetzt wird.</p>
<pre><code>
function set_plugin_meta($links, $file) {

	$plugin = plugin_basename(__FILE__);

	// create link
	if ($file == $plugin) {
		return array_merge(
			$links,
			array( sprintf( '&lt;a href=&quot;options-general.php?page=%s&quot;&gt;%s&lt;/a&gt;', $plugin, __('Settings') ) )
		);
	}

	return $links;
}

add_filter( 'plugin_row_meta', 'set_plugin_meta', 10, 2 );
</code></pre>
<p>Alternativ kann folgenden Funktion aufgerufen werden, die den Link vor die Links von WP setzt, was ich für übersichtlicher halte. Die Funktion wird im Anschluss je nach Version von WordPress aufgerufen, dabei kann die Funktion für 2.7 und 2.8 genutzt werden; ich hooke lediglich bei 2.8 nochmal, so dass der Link auch im rechten Bereich vorhanden ist.</p>
<pre><code>
// plugin definitions
define( 'FB_BASENAME', plugin_basename( __FILE__ ) );
define( 'FB_BASEFOLDER', plugin_basename( dirname( __FILE__ ) ) );
define( 'FB_FILENAME', str_replace( FB_BASEFOLDER.'/', '', plugin_basename(__FILE__) ) );

function filter_plugin_meta($links, $file) {

	/* create link */
	if ( $file == FB_BASENAME ) {
		array_unshift(
			$links,
			sprintf( '&lt;a href=&quot;options-general.php?page=%s&quot;&gt;%s&lt;/a&gt;', FB_FILENAME, __('Settings') )
		);
	}

	return $links;
}

global $wp_version;
if ( version_compare( $wp_version, '2.8alpha', '&gt;' ) )
	add_filter( 'plugin_row_meta', 'filter_plugin_meta', 10, 2 ); // only 2.8 and higher
add_filter( 'plugin_action_links', 'filter_plugin_meta', 10, 2 );
</code></pre>
<p>Diese kleine Erweiterung im Plugin macht nicht viel Mühe und stellt aus meiner Sicht trotzdem einen Mehrwert dar, der es dem Nutzer einfach macht, die Options-Seite zum Plugin aufzusuchen. Schade nur, dass die Entwickler von WordPress jedesmal diesen Hook ändern und man nun schon fast zu jeder neuen Version von WordPress eine eigene Funktion benötigt um diesen kleinen Mehrwert zu setzen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/meta-links-bei-wordpress-plugins/950/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/meta-links-bei-wordpress-plugins/950/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp28/28_plugin_meta_link-thumb.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp28/28_plugin_meta_link-thumb.png" medium="image">
			<media:title type="html">Screenshot eines Beispiel-Link am Plugin in der Plugin-Site des WordPress Backend</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Proxysupport für WordPress</title>
		<link>http://bueltge.de/proxysupport-fuer-wordpress/946/</link>
		<comments>http://bueltge.de/proxysupport-fuer-wordpress/946/#comments</comments>
		<pubDate>Fri, 08 May 2009 11:27:14 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=946</guid>
		<description><![CDATA[Wer WordPress im Umfeld eines Intranet nutzt, der wird schnell merken, dass trotz Internetverbindung keine Feedinhalte im Backend geladen werden. In der Regel liegt das am Zwangsproxy der Unternehmen. Bisher war WordPress dahingehend nicht sonderlich flexibel. Ab WordPress 2.8 ändert sich das und neue Konstanten sorgen dafür, dass man nun auch den Proxy eintragen kann, direkt in die <code>wp-config.php</code>.]]></description>
			<content:encoded><![CDATA[<p>Wer WordPress im Umfeld eines Intranet nutzt, der wird schnell merken, dass trotz Internetverbindung keine Feedinhalte im Backend geladen werden. In der Regel liegt das am Zwangsproxy der Unternehmen. Bisher war WordPress dahingehend nicht sonderlich flexibel. Ab WordPress 2.8 ändert sich das und neue Konstanten sorgen dafür, dass man nun auch den Proxy eintragen kann, direkt in die <code>wp-config.php</code>.<br />
<span id="more-946"></span></p>
<h3>Bis WordPress 2.7</h3>
<p>Bis zu dieser Version von WordPress klappt es nur mit einem Eingriff in den Core, Datei <code> wp-includes/class-snoopy.php</code>. Dort die Einstellungen von <code>$proxy_host</code>, <code>$proxy_port</code> und <code>$_isproxy</code> ändern. Der Wert var <code>$_isproxy = false;</code> bekommt natürlich <code>TRUE</code> als Value.</p>
<pre><code>
var $host       = "www.php.net"; // host name we are connecting to
var $port       = 8080; // port we are connecting to
var $proxy_host = ""; // proxy host to use
var $proxy_port = ""; // proxy port to use
var $proxy_user = ""; // proxy user to use
var $proxy_pass = ""; // proxy password to use
var $_isproxy   = true; // set if using a proxy server
</code></pre>
<h3>Ab WordPress 2.8</h3>
<p>Mit der neuen Version geht das alles ein wenig besser, denn kein Eingriff mehr in die Core-Dateien und direkt die Möglichkeit der Werte über die Definition von Werten in der Konfigurationsdatei <code>wp-config.php</code>.</p>
<pre><code>
define('WP_PROXY_HOST', '192.168.84.101');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_USERNAME', 'my_user_name');
define('WP_PROXY_PASSWORD', 'my_password');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com');
</code></pre>
<p>Diverse Hinweise gibt es auch im <a href="http://core.trac.wordpress.org/ticket/4011">Ticket 4011</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/proxysupport-fuer-wordpress/946/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/proxysupport-fuer-wordpress/946/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Design Tweaks</title>
		<link>http://bueltge.de/wordpress-design-tweaks/939/</link>
		<comments>http://bueltge.de/wordpress-design-tweaks/939/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 07:27:08 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Webdeveloper]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=939</guid>
		<description><![CDATA[Mit WordPress 2.7 wurde uns ein neues Design im Backend beschert, diesmal mit viel Aufwand und Analyse um ein angenehmes Arbeiten zu ermöglichen und möglichst viel Inhalt strukturiert darzustellen. Aus meiner Sicht ist das gelungen und die Arbeit mit WordPress war für mich persönlich noch nie so angenehm. Da ich aber WordPress vorrangig im Unternehmensumfeld einsetze, die Corporate Identity auch im Backend realisiere und Anwender von Laie bis Profi habe, sind die Anforderungen doch extrem unterschiedlich. Dabei habe ich bisher auf mein Plugin Adminimize gesetzt, das Backend auf die Anforderungen reduziert und das Design dem Corporate Design angepasst.]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 2.7 wurde uns ein neues Design im Backend beschert, diesmal mit viel Aufwand und Analyse um ein angenehmes Arbeiten zu ermöglichen und möglichst viel Inhalt strukturiert darzustellen. Aus meiner Sicht ist das gelungen und die Arbeit mit WordPress war für mich persönlich noch nie so angenehm. Da ich aber WordPress vorrangig im Unternehmensumfeld einsetze, die Corporate Identity auch im Backend realisiere und Anwender von Laie bis Profi habe, sind die Anforderungen doch extrem unterschiedlich. Dabei habe ich bisher auf mein Plugin <a href="http://bueltge.de/wordpress-admin-theme-adminimize/674/">Adminimize</a> gesetzt, das Backend auf die Anforderungen reduziert und das Design dem Corporate Design angepasst.</p>
<p>Aktuell macht Jane Wells im WordPress Team sich einige <a href="http://wordpress.org/development/2009/04/design-tweaks-whos-in-an-idea-in-three-acts/">Gedanken zum Backend Design und ruft zu Ideen auf</a>, die das Backend nicht neu gestalten, nur optimieren, so dass Nutzer nicht verschreckt werden. Aus meiner Sicht ist es gerade da sinnvoll, dass man die Hooks in WordPress nutzt und optionale Design einbringt, die der jeweilige Nutzer wählen kann. SO hole ich auch diverse Designs in Backend und überlasse die Wahl dem Nutzer. Lediglich die übergeordneten Themen, wie Farben und Logo, gebe ich im Rahmen des Corporate Designs vor. Da ich <a href="http://bueltge.de/wordpress-admin-theme-adminimize/674/">Adminimize</a> in den letzten Nächten erweitert haben, besonders gepuscht durch den Spendenmarathon der lieben Leserin <a href="http://tevarra.net">Samantha Phoumarath</a>.<br />
<span id="more-939"></span><br />
<a href="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_open_menu.png" title="klick für Zoom"><img class="centered" src="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_open_menu450.png" alt="Screenshot Fixed Design" /></a></p>
<p>Der obige Screenshot mag auf den ersten Blick nicht sonderlich das Design von WordPress verändern, aber es ist anders, anders in der Arbeitsweise - Header und Menu sind fix, so dass man aus jeder Scrollposition darauf zugreifen kann. Eine ganze Reihe von Nutzern empfinden das Arbeiten so besser und angenehmer. Als Hinweis sei aber vermerkt, dass meine jetzige Lösung nur in Browsern funktioniert, die <code>fixed</code> via CSS akzeptieren.</p>
<p>Im weiteren habe ich diverse Bereiche verkleinert, so sind Meta Boxen wesentlich schmaler; es ist mehr Platz ohne den Whitespace zu reduzieren.</p>
<p>Im weiteren habe ich ein alternatives Design im Plugin untergebracht, welches den Header verändert und die Navi damit um 50 Pixel nach oben holt. Auch dies wird gern genutzt, wobei hier schon der Wunsch des fixed Menu aufkam, aber bisher nicht umgesetzt wurde.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_tweak.png" alt="Screenshot Fixed Design" /></p>
<p>Vielleicht hat der eine oder andere Ideen, Wünsche und Hinweise zum Plugin, zum Design, die Kommentarfunktion steht offen.</p>
<p>Das <a href="http://bueltge.de/wordpress-admin-theme-adminimize/674/">Plugin</a> selbst ist vorrangig für andere Zwecke erstellt und verfügt aktuell über sehr viele Optionen, so kann man den Bereich Schreiben Beitrage und Seiten einschränken, die Oberfläche der Links beeinflussen, globale Bereiche verändern, HEader-Bereiche einschränken, verändern, Dashboard und Footer deaktivieren, umleiten mit eigenen Inhalten befüllen oder auch eigene Optionen hinzubringen, in dem man Klassen und IDs hinterlegt, einen Namen vergibt und diese dann wieder abhängig von der Benutzerrolle, wobei auch eigene Rollen unterstützt werden, deaktivierbar sind.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-design-tweaks/939/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-design-tweaks/939/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_open_menu450.png" />
		<media:content url="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_open_menu450.png" medium="image">
			<media:title type="html">Screenshot Fixed Design</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/adminimize/fb_fixed_head_navi_tweak.png" medium="image">
			<media:title type="html">Screenshot Fixed Design</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Vorbei mit my-hacks.php?</title>
		<link>http://bueltge.de/vorbei-mit-my-hacks-php/937/</link>
		<comments>http://bueltge.de/vorbei-mit-my-hacks-php/937/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 13:23:17 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=937</guid>
		<description><![CDATA[Noch diesen Monat soll die neue Version 2.8 von WordPress erscheinen; in der Blogosphäre wird schon lange kein so großer Wind mehr darum gemacht, wie es noch in den Jahren um Version 2.0 war. Aber der Linkmangel etc. wird ja auch in anderen Themen bemängelt.

Die neue <a href="http://codex.wordpress.org/Version_2.8">Version bringt viele neue Sachen</a>, fixt eine große Anzahl von Problemen und WordPress gestaltet sich aus meiner Sicht noch offener als in den Versionen zu vor. Eine der Punkte, die Benutzer beachten sollten, ist die Tatsache, dass man die Option für die Unterstützung der <code>my-hacks.php</code> entfernt. <a href="http://wordpress.org/development/2003/12/new-feature-my-hacksphp/">2003</a> wurde diese Datei noch als Feature angekündigt, geht sie nun wieder still und leise. WordPress hat ein ausgefeiltes Schnittstellen-System; man kann an diversen Punkten ansetzen und neue Funktionalitäten einbringen, so dass man sich dazu entschieden hat, die Lösung nicht mehr zu unterstützen. Alternativen und Möglichkeiten des weiteren Nutzen will hier kurz aufzeigen.]]></description>
			<content:encoded><![CDATA[<p>Noch diesen Monat soll die neue Version 2.8 von WordPress erscheinen; in der Blogosphäre wird schon lange kein so großer Wind mehr darum gemacht, wie es noch in den Jahren um Version 2.0 war. Aber der Linkmangel etc. wird ja auch in anderen Themen bemängelt.</p>
<p>Die neue <a href="http://codex.wordpress.org/Version_2.8">Version bringt viele neue Sachen</a>, fixt eine große Anzahl von Problemen und WordPress gestaltet sich aus meiner Sicht noch offener als in den Versionen zu vor. Eine der Punkte, die Benutzer beachten sollten, ist die Tatsache, dass man die Option für die Unterstützung der <code>my-hacks.php</code> entfernt. <a href="http://wordpress.org/development/2003/12/new-feature-my-hacksphp/">2003</a> wurde diese Datei noch als Feature angekündigt, geht sie nun wieder still und leise. WordPress hat ein ausgefeiltes Schnittstellen-System; man kann an diversen Punkten ansetzen und neue Funktionalitäten einbringen, so dass man sich dazu entschieden hat, die Lösung nicht mehr zu unterstützen. Alternativen und Möglichkeiten des weiteren Nutzen will hier kurz aufzeigen.<br />
<span id="more-937"></span></p>
<h3>my-hacks.php weiter nutzen</h3>
<p>Die Datei mit eigenen Erweiterungen kann auch in 2.8 weiter genutzt werden, sie wird nur nicht mehr per Option aus dem Backend aktiviert. Will man dies tun, so muss man den Eintrag <code>hack_file</code> in der Tabelle <em>options</em> auf <em>1</em> setzen.<br />
Dies geschieht entweder direkt in der Datenbank, beispielsweise über phpMyAdmin oder via Code:</p>
<pre><code>
update_option( 'hack_file', 1 );
</code></pre>
<p>Alternativ kann man die Option via Plugin wieder in das Backend holen, siehe <a href="http://schnurpsel.de/das-ende-der-wordpress-hacker-145/">Beitrag und Plugin-Download</a> bei Schurpsel.</p>
<p>Die Abfrage der Datei ist weiterhin im Core und soll auch so bleiben, auch die Abfrage des Felder in der Datenbank soll bleiben.</p>
<pre><code>
// Check for hacks file if the option is enabled
if ( get_option('hack_file') ) {
	if ( file_exists(ABSPATH . 'my-hacks.php') )
		require(ABSPATH . 'my-hacks.php');
}
</code></pre>
<p>Damit bleibt alles beim alten, wer das möchte. Die Datei weiterhin im Root (<code>ABSPATH</code>) der Installation ablegen und sie wird gezogen.</p>
<p>Die Überlegung die Datei nicht mehr zu unterstützen ist natürlich mit Überlegungen verbunden und da WordPress ausgezeichnete Schnittstellen bietet, ist die Unterstützung nicht mehr als relevant angesehen. Außerdem wird die Datei recht früh gezogen und lässt sich damit nicht immer so sauber steuern, wie man das von anderen Schnittstellen kennt. Eine Prüfung auf Intoleranzen und Probleme ist garnicht vorhanden und die Datei kann auch das System bremsen.</p>
<h3>via Plugin</h3>
<p>Eine der Schnittstellen ist die Plugin-Schnittstelle und daher bietet es sich an, dass man sich ein Plugin anlegt, in dem man die kleinen Hacks ablegt. Entweder man lernt wie das geht, zum Beispiel in meinem <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-simples-wp-plugin-teil-0/211/">kleinen Tutorial zum Plugin schreiben</a> oder hier die Vorlage.</p>
<p>Einfach eine PHP-Datei anlegen und folgenden Syntax rein, dann die eigenen Hacks dort ablegen und die Datei in das Plugin-Verzeichnis kopieren. Im Backend muss es dann nur noch aktiviert werden.</p>
<pre><code>
&lt;?php
/*
Plugin Name: my-hacks.php
Plugin URI: http://
Description: my-hacks.php - Ersatz seit WordPress 2.8
Author: DU
Version: 0.1
Author URI: http://
*/

/**
 * hier die Hacks ablegen
 */

?&gt;
</code></pre>
<h3>Theme-Funktionen</h3>
<p>Das aktive Theme kann immer eigene Funktionen hinzubringen, dazu wird die Datei <code>functions.php</code> genutzt und die kann jedem Theme hinzugefügt werden. Gedacht ist sie, um explizit für das jeweilige Theme, neue Funktionen einzubringen. Daher kann man auch die Hacks dort ablegen, also einfach in die <code>functions.php</code> des Themes schreiben, hochladen in den Theme-Ordner und fertig.</p>
<h3>Alternative Sprachordner</h3>
<p>Ein dritte Möglichkeit um eigene Funktionen einzubringen ist der Sprachordner, im Standard ist das <code>/wp-content/languages/</code>; <code>wp-content</code> kann seit Version 2.5 verschoben und umbenannt werden. Wenn ein Sprachschlüssel in der <code>wp-config.php</code> gesetzt ist, zum Beispiel de_DE, dann wird durch WordPress in dem Ordner nach einer Sprachdatei <code>.mo</code>- und einer <code>.php</code>-Datei gesucht und wenn vorhanden, gezogen.</p>
<pre><code>
define ('WPLANG', 'de_DE');
</code></pre>
<pre><code>
/**
 * The locale of the blog
 * @since 1.5.0
 */
$locale = get_locale();
$locale_file = WP_LANG_DIR . "/$locale.php";
if ( is_readable($locale_file) )
	require_once($locale_file);

/**
 * Loads the theme's translated strings.
 *
 * If the current locale exists as a .mo file in the theme's root directory, it
 * will be included in the translated strings by the $domain.
 *
 * The .mo files must be named based on the locale exactly.
 *
 * @since 1.5.0
 *
 * @param string $domain Unique identifier for retrieving translated strings
 */
function load_theme_textdomain($domain, $path = false) {
	$locale = get_locale();

	$path = ( empty( $path ) ) ? get_template_directory() : $path;

	$mofile = "$path/$locale.mo";
	load_textdomain($domain, $mofile);
}
</code></pre>
<p>Dies sollte natürlich nur für Hacks und Funktionen genutzt werden, die mit der Sprache des Blog zu tun haben und nicht missbraucht werden. Im Grunde kann man aber auch dort Funktionen ablegen. Diese Möglichkeit ist vor allem sehr gut geeignet und sprachtypische Funktionen abzulegen, wie zum Beispiel das die URL bei Permalinks sauber übergeben wird (ue statt u bei ü etc.).<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/vorbei-mit-my-hacks-php/937/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/vorbei-mit-my-hacks-php/937/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Plugin-Pfad</title>
		<link>http://bueltge.de/wordpress-plugin-pfad/936/</link>
		<comments>http://bueltge.de/wordpress-plugin-pfad/936/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 09:10:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=936</guid>
		<description><![CDATA[Bei der Arbeit an einem Plugin ist aufgefallen, dass der Pfad zu zugehörigen Dateien nicht immer vollständig ist, was an der Version von WordPress liegt. Mit WordPress Version 2.8 wurde die Funktion <code>plugins_url()</code> erweitert und sie lässt sich nun sauberer einbinden, keine Pflege des Ordners, in dem das Plugin steckt. Ein Beispiel soll es verdeutlichen.]]></description>
			<content:encoded><![CDATA[<p>Bei der Arbeit an einem Plugin ist aufgefallen, dass der Pfad zu zugehörigen Dateien nicht immer vollständig ist, was an der Version von WordPress liegt.<br />
Mit WordPress <strong>Version 2.8</strong> wurde die Funktion <code>plugins_url()</code> erweitert und sie lässt sich nun sauberer einbinden, keine Pflege des Ordners, in dem das Plugin steckt. Ein Beispiel soll es verdeutlichen und eventuell hilft der kleine Hinweis dem einen oder anderen Autor bei der Arbeit.<br />
<span id="more-936"></span><br />
In den Artikeln &#8222;<a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">JavaScript-Bibliotheken in und aus WordPress nutzen</a>&#8220;, &#8222;<a href="http://bueltge.de/menu-seite-ab-wordpress-27-hinzufuegen/845/">Menu Seite ab WordPress 2.7 hinzufügen</a>&#8220; und &#8222;<a href="http://bueltge.de/wordpress-verzeichnisse-bestimmen/779/">WordPress Verzeichnisse bestimmen</a>&#8220; habe ich oft die Funktion <code>plugins_url()</code> eingesetzt, da sie eine sehr schöne Übergabe des des Pfades ermöglicht.</p>
<p>Ab WordPress Version 2.8 kann die Funktion zwei Parameter aufnehmen:</p>
<pre><code>
/**
 * @param string $path Optional. Path relative to the plugins url.
 * @param string $plugin Optional. The plugin file that you want to be relative to - i.e. pass in __FILE__
 * @return string Plugins url link with optional path appended.
*/
function plugins_url($path = '', $plugin = '')
</code></pre>
<p>Bisher konnte man nur den $path-Parameter übergeben, der damit eine eigene Definition oder die Übergabe des Ordners verlangte.</p>
<pre><code>
$style = plugins_url( 'my_plugin_folder/css/style-frontend.css' );
</code></pre>
<p>Mit der Erweiterung ab Version 2.8 von WordPress kann das wie folgt geschehen:</p>
<pre><code>
$style = plugins_url( 'css/style-frontend.css', __FILE__ );
</code></pre>
<p>Die Nutzung sollte damit einfacher und klarer sein. Stellt sich nun nur wieder die Frage, wie mache ich damit die Abwärtskompatibilität des Plugins. Dazu kann man entweder die Version abfragen:</p>
<pre><code>
if ( version_compare( $wp_version, '2.8dev', '>' ) )
</code></pre>
<p>und ergänzt dann jeweils oder schreibt eine eigene Funktion für den Ersatz:</p>
<pre><code>
// function for WP < 2.8
function plugins_url($path = '', $plugin = '') {
  if ( function_exists('is_ssl') )
    $scheme = ( is_ssl() ? 'https' : 'http' );
  else
    $scheme = 'http';
  $url = WP_PLUGIN_URL;
  if ( 0 === strpos($url, 'http') ) {
    if ( function_exists('is_ssl') &#038;& is_ssl() )
      $url = str_replace( 'http://', "{$scheme}://", $url );
  }

  if ( !empty($plugin) &#038;& is_string($plugin) )
  {
    $folder = dirname(plugin_basename($plugin));
    if ('.' != $folder)
      $url .= '/' . ltrim($folder, '/');
  }

  if ( !empty($path) &#038;& is_string($path) &#038;& strpos($path, '..') === false )
    $url .= '/' . ltrim($path, '/');

  return apply_filters('plugins_url', $url, $path, $plugin);
}
</code></pre>
<p>Das nur als Alternative, die Möglichkeiten sind vielfältig - vielleicht hat der eine oder andere eine schönere Idee und Lösung?<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-plugin-pfad/936/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-plugin-pfad/936/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Ausgabe des WordPress Admin für Seiten, Beiträge und Kommentare anpassen</title>
		<link>http://bueltge.de/ausgabe-des-wordpress-admin-fuer-seiten-beitraege-und-kommentare-anpassen/926/</link>
		<comments>http://bueltge.de/ausgabe-des-wordpress-admin-fuer-seiten-beitraege-und-kommentare-anpassen/926/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 08:10:42 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Admin]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=926</guid>
		<description><![CDATA[Je nach Arbeitsweise empfindet es der eine oder andere Nutzer im Backend von WordPress recht störend, dass man maximal 20 Beiträge, Seiten und Kommentare pro Seite gelistet bekommt. Gerade wenn man mit vielen Übersichten arbeiten muss und eine schnelle Verbindung hat, dann kann eine erhöhte Anzahl nützlich sein. Wie man das anpasst und ein wenig mit CSS in der Darstellung optimiert, dazu hier einige Tipps.]]></description>
			<content:encoded><![CDATA[<p>Je nach Arbeitsweise empfindet es der eine oder andere Nutzer im Backend von WordPress recht störend, dass man maximal 20 Beiträge, Seiten und Kommentare pro Seite gelistet bekommt. Gerade wenn man mit vielen Übersichten arbeiten muss und eine schnelle Verbindung hat, dann kann eine erhöhte Anzahl nützlich sein. Wie man das anpasst und ein wenig mit CSS in der Darstellung optimiert, dazu hier einige Tipps.<br />
<span id="more-926"></span></p>
<h3>Ab WordPress Version 2.8</h3>
<p>Mit WordPress 2.8 kommt ein neuer Wert in die nutzereigenen Optionen pro Seite im Backend. Damit kann jeder Nutzer seine Vorlieben in dem Umfang der Beiträge, Seiten und Kommentare einstellen. Will man das ganze übergreifend lösen und auch schon im Vorfeld von WordPress 2.8, dann kann die folgende Syntax helfen.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/posts_per_page.png" alt="Post per Page 2.8" title="mit WordPress 2.8 kommt eine Option in den Seiten des Backend hinzu" /></p>
<h3>Alternative Plugin</h3>
<p>Einbetten sollte man die Syntax in ein Plugin, um die Lösung zu kapseln.<br />
Ich stelle hier bewusst kein Plugin zur Verfügung, da mich Support der bestehenden Lösungen eh schon überfordert. Es ist also eher als Basis für Leute gedacht, die hier ansetzen wollen und als Speicher für mich, wenn ich es wieder mal benötige.</p>
<p>Einige Bemerkungen habe ich direkt am Quellcode hinterlegt, so dass es verständlicher wird. Ebenso lade ich eine CSS-Datei, der Inhalt ist im Anschluss zu finden, die bei der großen Anzahl an Einträgen, dass Design etwas ändert und so ein wenig mehr Übersicht schaft.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/posts_per_page2.png" alt="Post per Page optimiert" title="via CSS die Darstellung reduziert" /></p>
<pre><code>
// Wert für Beiträge
define( 'FB_CAP_PER_POST', 100 );
// Wert für Seiten
define( 'FB_CAP_PER_PAGE', 100 );
// Wert für Kommentare
define( 'FB_CAP_PER_COMMENT', 100 );

// nur im Adminbereich
if ( is_admin() ) {
	global $pagenow;

	if ( $pagenow == 'edit-pages.php' ) {
		add_filter( 'manage_pages_query', 'page_ChangeAdminPagination' );
		add_action( 'admin_print_styles', 'AddMyStylesheet' );
	}
	if ( $pagenow == 'edit.php' ) {
		add_action( 'admin_head', 'post_ChangeAdminPagination' );
		add_action( 'admin_print_styles', 'AddMyStylesheet' );
	}
	if ( $pagenow == 'edit-comments.php' )
		add_filter( 'comments_per_page', 'comment_ChangeAdminPagination' );
}

function post_ChangeAdminPagination() {
	global $wp_query;

	if ( $wp_query->query_vars[s] == '' ) {
		$per_post = (int) FB_CAP_PER_POST;
		$wp_query->query( 'showposts=' . $per_post );
	}
}

function page_ChangeAdminPagination($query) {
	global $per_page;

	$per_page = (int) FB_CAP_PER_PAGE;
	//$query['posts_per_page'] = $per_page;
	$query['posts_per_archive_page'] = $per_page;

	return $query;
}

function comment_ChangeAdminPagination($count) {

	$per_comment = (int) FB_CAP_PER_COMMENT;

	return $per_comment;
}

function AddMyStylesheet() {

		$myStyleFile = WP_PLUGIN_URL . '/change_admin_pagination/css/style.css';
		wp_register_style( 'change_admin_pagination', $myStyleFile );
		wp_enqueue_style( 'change_admin_pagination');
}
</code></pre>
<p>Der folgende Inhalt dient nur dazu, dass der Bereich zum Bearbeiten der jeweiligen Seite oder Beitrags neben dem Eintrag dargestellt wird. Damit wird die Zeile kleiner und man hat mehr Einträge im Blickfeld.</p>
<pre><code>
/**
 * style for smaller tables in admin of WordPress
 * @author Frank Bültge
 * @date 01.04.2009 20:51:59
 */
.post-title strong {
	float: left;
}

.row-actions {
	float: left;
	margin-left: 1% !important;
}

.check-column, tr td {
	padding-bottom: 0 !important;
}

.column-date {
	width: 15% !important;
}

td.date {
	font-size: .6em;
}

td.date abbr {
	float: right;
}
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/ausgabe-des-wordpress-admin-fuer-seiten-beitraege-und-kommentare-anpassen/926/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/ausgabe-des-wordpress-admin-fuer-seiten-beitraege-und-kommentare-anpassen/926/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/posts_per_page.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/posts_per_page.png" medium="image">
			<media:title type="html">mit WordPress 2.8 kommt eine Option in den Seiten des Backend hinzu</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/posts_per_page2.png" medium="image">
			<media:title type="html">via CSS die Darstellung reduziert</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress 2.7 offline nutzen</title>
		<link>http://bueltge.de/wordpress-27-offline-nutzen/710/</link>
		<comments>http://bueltge.de/wordpress-27-offline-nutzen/710/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 10:02:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.7]]></category>
		<category><![CDATA[WP2.8]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=710</guid>
		<description><![CDATA[Die kommende Version 2.7 von WordPress hat das viel erwünschte Core-Update drin. Schon jetzt kann man damit spielen und die Funktionen testen.
Allerdings will oder kann man nicht immer online arbeiten, daher hier ein kleiner Workaround, wie man trotzdem auf WordPress 2.7 Beta entwickeln kann.]]></description>
			<content:encoded><![CDATA[<p>Die kommende Version 2.7 von WordPress hat das viel erwünschte Core-Update drin. Schon jetzt kann man damit spielen und die Funktionen testen.<br />
Allerdings will oder kann man nicht immer online arbeiten, daher hier ein kleiner Workaround, wie man trotzdem auf WordPress 2.7 Beta entwickeln kann.<br />
<span id="more-710"></span><br />
Da man schon gar nicht in das Backend kommt, empfiehlt es sich die Hook-Aufrufe in <code>/wp-includes/update.php</code> auszukommentieren.</p>
<pre><code>
add_action( 'init', 'wp_version_check' );
...
add_action( 'load-plugins.php', 'wp_update_plugins' );
add_action( 'admin_init', '_maybe_update_plugins' );
</code></pre>
<p>Damit ist kommt man wieder in das Backend und kann ungestört arbeiten. Wer aber täglich bzw. des öfteren ein Update zieht, was bei der Verwendung aus dem SVN sinnvoll ist, der will sicher nicht ständig diesen Eintrag ändern.</p>
<p>Alternativ lohnt also ein Plugin. Eine einfache und schnelle Variante kann man sich im Anschluss kopieren und nutzen. Einfach in den Plugin-Ordner verschieben und im Backend aktivieren. Dann kann der Eingriff in der <code>update.php</code> wieder rückgängig gemacht werden und die Versionsprüfung erfolgt nicht.</p>
<pre><code>
&lt;?php
/**
 * @package WP Offline
 * @author Frank Bültge
 * @version 0.5
 */

/*
Plugin Name: WP Offline
Plugin URI: http://bueltge.de/wordpress-27-offline-nutzen/710/
Description: Deactivate autoupdate for core, plugins and themes
Version: 0.5
Author: Frank B&amp;uuml;ltge
Author URI: http://bueltge.de/
Last Change: 04.01.2011
*/

remove_action( 'admin_init', '_maybe_update_core' );
remove_action( 'wp_version_check', 'wp_version_check' );
wp_clear_scheduled_hook( 'wp_version_check' );

remove_action( 'load-plugins.php', 'wp_update_plugins' );
remove_action( 'load-update.php', 'wp_update_plugins' );
remove_action( 'load-update-core.php', 'wp_update_plugins' );
remove_action( 'admin_init', '_maybe_update_plugins' );
remove_action( 'wp_update_plugins', 'wp_update_plugins' );
wp_clear_scheduled_hook( 'wp_update_plugins' );

remove_action( 'load-themes.php', 'wp_update_themes' );
remove_action( 'load-update.php', 'wp_update_themes' );
remove_action( 'load-update-core.php', 'wp_update_themes' );
remove_action( 'admin_init', '_maybe_update_themes' );
remove_action( 'wp_update_themes', 'wp_update_themes' );
wp_clear_scheduled_hook( 'wp_update_themes' );

remove_action('init', 'wp_schedule_update_checks');
?&gt;
</code></pre>
<p>Kleines Update; mit Version 2.8 von WordPress werden auch die Themes auf Aktualität geprüft, daher habe ich die Syntax des Plugins erweitert und nun kann es auch unter 2.8 genutzt werden.<br />
Version 0.5 ist für 3.0 geeignet und ich habe wieder einige Anpassungen vorgenommen. In Zukunft werde ich via Github die aktuelle Version pflegen; bitte also dort schauen - <a href="https://github.com/bueltge/WP-Offline">https://github.com/bueltge/WP-Offline</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-27-offline-nutzen/710/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-27-offline-nutzen/710/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
	</channel>
</rss>

