WordPress-Funktionen sind nur verfügbar, wenn WordPress geladen ist. Wenn Sie style.php
direkt anrufen, können Sie keine WordPress-Funktion verwenden.
Eine einfache Möglichkeit, WordPress für Ihr PHP-gesteuertes Stylesheet zu laden, besteht darin, WordPress einen Endpunkt hinzuzufügen: eine benutzerdefinierte, reservierte URL, unter der Sie Ihre Vorlagendatei laden.
Um dorthin zu gelangen, müssen Sie:
Registrieren Sie einen Endpunkt 'init'
mit add_rewrite_endpoint()
. Nennen wir es 'phpstyle'
.
Hängen Sie sich ein 'request'
und stellen Sie sicher, dass die Endpunktvariable 'phpstyle'
nicht leer ist, wenn sie festgelegt ist. Lesen Sie Christopher Davis 'hervorragendes A (Mostly) Complete Guide zur WordPress Rewrite API, um zu verstehen, was hier vor sich geht.
Hängen Sie an 'template_redirect'
und liefern Sie Ihre Datei anstelle der Standardvorlagendatei index.php
.
Um die Sache kurz zu halten, habe ich im folgenden Demo-Plugin alle drei einfachen Schritte in einer Funktion zusammengefasst.
Plugin PHP Style
<?php # -*- coding: utf-8 -*-
/*
* Plugin Name: PHP Style
* Description: Make your theme's 'style.php' available at '/phpstyle/'.
*/
add_action( 'init', 'wpse_54583_php_style' );
add_action( 'template_redirect', 'wpse_54583_php_style' );
add_filter( 'request', 'wpse_54583_php_style' );
function wpse_54583_php_style( $vars = '' )
{
$hook = current_filter();
// load 'style.php' from the current theme.
'template_redirect' === $hook
&& get_query_var( 'phpstyle' )
&& locate_template( 'style.php', TRUE, TRUE )
&& exit;
// Add a rewrite rule.
'init' === $hook && add_rewrite_endpoint( 'phpstyle', EP_ROOT );
// Make sure the variable is not empty.
'request' === $hook
&& isset ( $vars['phpstyle'] )
&& empty ( $vars['phpstyle'] )
&& $vars['phpstyle'] = 'default';
return $vars;
}
Installieren Sie das Plugin, besuchen Sie wp-admin/options-permalink.php
einmal, um die Umschreiberegeln zu aktualisieren, und fügen Sie ein style.php
zu Ihrem Thema hinzu.
Probe style.php
<?php # -*- coding: utf-8 -*-
header('Content-Type: text/css;charset=utf-8');
print '/* WordPress ' . $GLOBALS['wp_version'] . " */\n\n";
print get_query_var( 'phpstyle' );
Jetzt besuchen yourdomain/phpstyle/
. Ausgabe:
/* WordPress 3.3.2 */
default
Aber wenn Sie zur yourdomain/phpstyle/blue/
Ausgabe gehen, ist:
/* WordPress 3.3.2 */
blue
Sie können den Endpunkt also verwenden, um abhängig vom Wert von verschiedene Stylesheets mit einer Datei zu liefern get_query_var( 'phpstyle' )
.
Vorbehalt
Dies wird Ihre Website verlangsamen. WordPress muss bei jedem Besuch zweimal geladen werden . Tun Sie es nicht ohne aggressives Caching.