Ich habe meine style.php
Datei so.
<?php header('Content-Type: text/css');?>
#div{
background:<?php echo get_option('bgcolor');?>;
}
Das funktioniert nicht, aber wenn ich das tue, funktioniert es.
<?php header('Content-Type: text/css');?>
#div{
background: <?php echo 'blue';?>;
}
Was wäre das Problem?
Dies ist die mainfile.php
<?php
function test(){
global get_option('bgcolor');?>
<input type="text" id="bgcolor" name="post_popup_settings[bgcolor]" value="<?php echo get_option('bgcolor');?> " />
<?php
}
add_action('admin_head','test');
Dies ist eigentlich im Admin-Bereich.
WordPress-Funktionen sind nur verfügbar, wenn WordPress geladen ist. Wenn Sie Ihren style.php
direkt aufrufen, 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 auf 'init'
mit add_rewrite_endpoint()
. Nennen wir es 'phpstyle'
.
Hängen Sie sich in 'request'
ein und stellen Sie sicher, dass die Endpunktvariable 'phpstyle'
nicht leer ist, wenn sie festgelegt ist. Lesen Sie Christopher Davis 'hervorragenden (meistens) vollständigen Leitfaden zur WordPress Rewrite-API , um zu verstehen, was hier vor sich geht.
Hängen Sie sich in 'template_redirect'
ein und übermitteln Sie Ihre Datei anstelle der Standardvorlagendatei index.php
.
Um die Sache kurz zu halten, habe ich alle drei einfachen Schritte in der Funktion one im folgenden Demo-Plugin kombiniert.
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 Ihrem Thema einen style.php
hinzu.
Beispiel 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' );
Besuchen Sie jetzt yourdomain/phpstyle/
. Ausgabe:
/* WordPress 3.3.2 */
default
Aber wenn Sie zu yourdomain/phpstyle/blue/
gehen, ist die Ausgabe:
/* WordPress 3.3.2 */
blue
Sie können den Endpunkt also verwenden, um abhängig vom Wert von get_query_var( 'phpstyle' )
verschiedene Stylesheets mit einer Datei bereitzustellen.
Einschränkung
Dies wird Ihre Website verlangsamen. WordPress muss für jeden Besuch zweimal geladen werden. Tun Sie es nicht ohne aggressives Caching.
Sie könnten dies tun, indem Sie die Ausgabe über admin-ajax.php
laden. Ein besserer Ansatz besteht darin, die WordPress-Konstante SHORTINIT
zu verwenden, damit Sie nur die Funktionen laden können, die Sie benötigen. Dazu müssen Sie jedoch wp-load.php
suchen und laden:
// send CSS Header
header("Content-type: text/css; charset: UTF-8");
// faster load by reducing memory with SHORTINIT
define('SHORTINIT', true);
// recursively find WordPress load
function find_require($file,$folder=null) {
if ($folder === null) {$folder = dirname(__FILE__);}
$path = $folder.DIRECTORY_SEPARATOR.$file;
if (file_exists($path)) {require($path); return $folder;}
else {
$upfolder = find_require($file,dirname($folder));
if ($upfolder != '') {return $upfolder;}
}
}
// load WordPress core (minimal)
$wp_root_path = find_require('wp-load.php');
define('ABSPATH', $wp_root_path);
define('WPINC', 'wp-includes');
Zu diesem Zeitpunkt werden Sie müssen sichergehen, dass Sie alle anderen wp-includes
-Dateien einschließen, die Sie zum Abrufen Ihrer Designoptionen benötigen. Diese hängen davon ab, wie Sie speichern und auf diese zugreifen. (Wahrscheinlich müssen Sie dieser Liste weitere hinzufügen, damit Sie keine schwerwiegenden Fehler erhalten. Im weiteren Verlauf werden Sie jedoch anhand der schwerwiegenden Fehler darüber informiert, welche Dateien Sie hinzufügen müssen.) Z.
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'version.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'general-template.php');
include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'link-template.php');
Sobald Sie alle Funktionen haben, die Sie benötigen, können Sie das CSS mit diesen Funktionen ausgeben ... zB.
echo 'body {color:' . get_theme_mod('body_color') . ';}';
echo 'body {backgroundcolor:' . get_theme_mod('body_background_color') . ';}';
exit;
Anschließend können Sie die Datei wie gewohnt in eine Warteschlange einreihen. Beispiel:
wp_enqueue_style('custom-css',trailingslashit(get_template_directory_uri()).'styles.php');