Як я можу використовувати функції WordPress у своєму стилі таблиці?


21

У мене такий 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');

Це насправді в розділі адміністратора.


Як називається WordPress у style.php?
фуксія

Я використав wp_enqueue_scripts ();
Ронні

wp_enqueue_style ('my_style', plugin_dir_url ( FILE ). 'Включає / style.php');
Ронні

1
Я впевнений, що ви не використовуєте це у своєму style.php. Якщо файл стилю не викликається WordPress, функція WordPress недоступна.
фуксія

Відповіді:


26

Функції WordPress доступні лише у випадку завантаження WordPress. Якщо ви телефонуєте style.phpбезпосередньо, ви не можете використовувати функцію WordPress.

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

Щоб потрапити туди, ви повинні:

  1. Зареєструвати кінцеву точку 'init'з add_rewrite_endpoint(). Давайте назвемо це 'phpstyle'.

  2. Підключіть 'request'і переконайтеся, що змінна кінцевої точки 'phpstyle'не порожня, якщо вона встановлена. Прочитайте чудове повне керівництво по API для перезапису WordPress Крістофера Девіса, щоб зрозуміти, що тут відбувається.

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

Щоб зробити короткий, я поєднав усі три простих кроки в одній функції в наступному демо-плагіні.

PHP Стиль Plugin

<?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;
}

Встановіть плагін, завітайте 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'] . " */\n\n";

print get_query_var( 'phpstyle' );

Тепер відвідайте yourdomain/phpstyle/. Вихід:

/* WordPress 3.3.2 */

default

Але якщо ви переходите до yourdomain/phpstyle/blue/виводу:

/* WordPress 3.3.2 */

blue

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

Caveat

Це сповільнить ваш сайт. WordPress потрібно завантажувати два рази за кожен візит. Не робіть це без агресивного кешування.


+1 для перенесення цього повідомлення на WP. Коротка ідея: get_query_var( 'phpstyle' ) AND ! defined( 'SHORTINIT' ) AND define( 'SHORTINIT', true )пришвидшити справи ... і якщо тоді всі необхідні функції будуть доступні ...
кайзер

1

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

// 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');

У цей момент вам потрібно буде обов’язково включити будь-які інші 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');

Коли ви додаєте код до моїх файлів, він все ще не визначається. Це мій код: pastebin.com/BJaUWX1x
J. Doe

Вам не потрібно ../../на wp-load.phpшляху до функції , заданої буде знайти його для вас , як це ... але , як я сказав , вам потрібно знайти і включити будь-які файли вам потрібно , що є функції , які ви використовуєте, наприклад. get_background_imageє в theme.phpтощо ... при додаванні до CSS вам може знадобитися більше, тому вам потрібно буде навчитися їх шукати, щоб ефективно та надійно використовувати цей метод.
majick
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.