it-swarm.com.de

Wie kann ich WordPress-Funktionen in meinem Stylesheet verwenden?

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.

21
Ronny

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:

  1. Registrieren Sie einen Endpunkt auf 'init' mit add_rewrite_endpoint() . Nennen wir es 'phpstyle'.

  2. 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.

  3. 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.

26
fuxia

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');
1
majick