Как я могу использовать функции WordPress в моей таблице стилей?

У меня есть файл style.php :

<?php  header('Content-Type: text/css');?>
#div{
    background:<?php  echo get_option('bgcolor');?>;
}

Это не работает. Но когда я делаю вот так, то работает.

<?php  header('Content-Type: text/css');?>
#div{
    background: <?php  echo 'blue';?>;
}

В чем может быть проблема?

Вот мой 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');

Это на самом деле в разделе администратора.

Понравилась статья? Поделиться с друзьями:
WPAsk
Ответов: 2
  1. fuxia

    Функции WordPress доступны только в том случае, если WordPress загружен. Если вы вызываете свой style.php напрямую, вы не можете использовать функцию WordPress.

    Один простой способ загрузить WordPress для вашей таблицы стилей, управляемой PHP, — добавить конечную точку в WordPress: настраиваемый, зарезервированный URL-адрес, куда вы загружаете файл шаблона.

    Чтобы попасть туда, вам нужно:

    1. Зарегистрируйте конечную точку в 'init' с помощью add_rewrite_endpoint() . Давайте назовем его 'phpstyle' .

    2. Подключитесь к 'request' и убедитесь, что переменная конечной точки 'phpstyle' не пуста, если она установлена.

    3. Подключитесь к 'template_redirect' и доставьте свой файл вместо файла шаблона по умолчанию index.php .

    Для краткости я соединил все три простых шага в функции один в следующем демонстрационном плагине.

    Плагин PHP Style

    <?php # -*- coding: utf-8 -*-
    /*
     * Plugin Name: PHP Style
     */
    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();
    
        // загрузка 'style.php' с активной темы.
        'template_redirect' === $hook
            && get_query_var( 'phpstyle' )
            && locate_template( 'style.php', TRUE, TRUE )
            && exit;
    
        // Правило перезаписи.
        'init' === $hook && add_rewrite_endpoint( 'phpstyle', EP_ROOT );
    
        // Убедитесь, что переменная не пуста.
        'request' === $hook
            && isset ( $vars['phpstyle'] )
            && empty ( $vars['phpstyle'] )
            && $vars['phpstyle'] = 'default';
    
        return $vars;
    }
    

    Установите плагин, посетите wp-admin/options-permalink.php один раз, чтобы обновить правила перезаписи, и добавьте style.php в свою тему.

    Пример style.php

    <?php # -*- coding: utf-8 -*-
    header('Content-Type: text/css;charset=utf-8');
    
    print '/* WordPress ' . $GLOBALS['wp_version'] . " */nn";
    
    print get_query_var( 'phpstyle' );
    

    Откройте yourdomain/phpstyle/. Output:

    /* WordPress х.х.х */
    
    default
    

    Но если вы перейдете yourdomain/phpstyle/blue/, то вывод будет таким:

    /* WordPress х.х.х */
    
    blue
    

    Таким образом, вы можете использовать конечную точку для доставки разных таблиц стилей с одним файлом в зависимости от значения get_query_var ('phpstyle') .

  2. majick

    Вы можете сделать это, загрузив вывод через admin-ajax.php , но лучший подход — использовать константу WordPress SHORTINIT , чтобы вы могли загрузить только необходимые функции, но вам нужно найти и загрузить wp-load.php . Чтобы сделать это:

    // отправить CSS Header
    header("Content-type: text/css; charset: UTF-8");
    
    // более быстрая загрузка за счет сокращения памяти с помощью SHORTINIT
    define('SHORTINIT', true);
    
    // рекурсивно найти загрузку WordPress
    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;}
        }
    }
    
    // загрузка ядра WordPress 
    $wp_root_path = find_require('wp-load.php');
    define('ABSPATH', $wp_root_path);
    define('WPINC', 'wp-includes');
    

    В этот момент вам нужно убедиться, что вы включили все остальные файлы wp-includes , которые вам нужны, чтобы получить параметры своей темы — которые будут варьироваться в зависимости от вашего состояния. сохранение и, таким образом, доступ к тем. (Вам, вероятно, нужно будет добавить больше в этот список, чтобы избежать фатальных ошибок, но по ходу фатальные ошибки сообщат вам, какие файлы вам нужно добавить.) Например.

    include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'version.php');
    include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'general-template.php');
    include(ABSPATH.WPINC.DIRECTORY_SEPARATOR.'link-template.php');
    

    Затем, когда у вас есть все необходимые функции, вы можете вывести CSS с помощью этих функций … например.

    echo 'body {color:' . get_theme_mod('body_color') . ';}';
    echo 'body {backgroundcolor:' . get_theme_mod('body_background_color') . ';}';
    exit;
    

    Затем вы можете поставить файл в обычном порядке, например:

    wp_enqueue_style('custom-css',trailingslashit(get_template_directory_uri()).'styles.php');
    
Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: