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 plugins_url()
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.
In den Artikeln „JavaScript-Bibliotheken in und aus WordPress nutzen“, „Menu Seite ab WordPress 2.7 hinzufügen“ und „WordPress Verzeichnisse bestimmen“ habe ich oft die Funktion plugins_url()
eingesetzt, da sie eine sehr schöne Übergabe des des Pfades ermöglicht.
Ab WordPress Version 2.8 kann die Funktion zwei Parameter aufnehmen:
/**
* @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 = '')
Bisher konnte man nur den $path-Parameter übergeben, der damit eine eigene Definition oder die Übergabe des Ordners verlangte.
$style = plugins_url( 'my_plugin_folder/css/style-frontend.css' );
Mit der Erweiterung ab Version 2.8 von WordPress kann das wie folgt geschehen:
$style = plugins_url( 'css/style-frontend.css', __FILE__ );
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:
if ( version_compare( $wp_version, '2.8dev', '>' ) )
und ergänzt dann jeweils oder schreibt eine eigene Funktion für den Ersatz:
// 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') && is_ssl() )
$url = str_replace( 'http://', "{$scheme}://", $url );
}
if ( !empty($plugin) && is_string($plugin) )
{
$folder = dirname(plugin_basename($plugin));
if ('.' != $folder)
$url .= '/' . ltrim($folder, '/');
}
if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
$url .= '/' . ltrim($path, '/');
return apply_filters('plugins_url', $url, $path, $plugin);
}
Das nur als Alternative, die Möglichkeiten sind vielfältig - vielleicht hat der eine oder andere eine schönere Idee und Lösung?