스타일 시트에서 워드 프레스 기능을 어떻게 사용합니까?


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

이것은 실제로 관리자 섹션에 있습니다.


style.php에서
fuxia

wp_enqueue_scripts ()를 사용했습니다.
Ronny

wp_enqueue_style ( 'my_style', plugin_dir_url ( FILE ) .'Includes / style.php ');
Ronny

1
나는 당신이 당신의에서 그것을 사용하지 않을 것이라고 확신합니다 style.php. WordPress에서 스타일 파일을 호출하지 않으면 WordPress 기능을 사용할 수 없습니다.
fuxia

답변:


26

워드 프레스 기능은 워드 프레스가로드 된 경우에만 사용할 수 있습니다. style.php직접 전화 하면 워드 프레스 기능을 사용할 수 없습니다.

PHP 기반 스타일 시트에 WordPress를로드하는 간단한 방법 중 하나는 템플릿 파일을로드하는 사용자 지정 예약 URL 인 WordPress에 엔드 포인트를 추가하는 것입니다.

거기에 도착하려면 :

  1. 에 엔드 포인트를 등록 'init'과 함께 add_rewrite_endpoint(). 이름을 지어 봅시다 'phpstyle'.

  2. 에 후크 'request'와 확실히 엔드 포인트 변수하게 'phpstyle'설정된 경우 비어 있지 않습니다. 크리스토퍼 데이비스의 우수한 A (대부분) WordPress Rewrite API 에 대한 완벽한 안내서를 읽고 여기에서 무슨 일이 일어나고 있는지 이해하십시오.

  3. 'template_redirect'기본 템플릿 파일 대신 파일에 연결하여 전달하십시오 index.php.

일을 짧게 유지하기 위해 다음 데모 플러그인에서 세 가지 간단한 단계를 하나의 함수로 결합했습니다 .

플러그인 PHP 스타일

<?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' ).

경고

사이트 속도가 느려집니다. 방문 할 때마다 WordPress를 두 번 로드해야합니다 . 적극적인 캐싱 없이는하지 마십시오.


이것을 WP로 포팅하기 위해 +1. 간단한 아이디어 : 작업 get_query_var( 'phpstyle' ) AND ! defined( 'SHORTINIT' ) AND define( 'SHORTINIT', true )속도를 높이려면 필요한 모든 기능을 사용할 수 있습니다.
kaiser

1

를 통해 출력을로드 하여이 작업을 수행 할 수 admin-ajax.php있지만 더 나은 방법은 WordPress SHORTINIT상수 를 사용하여 필요한 기능을로드 할 수는 있지만 찾아서로드해야한다는 것입니다 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_imagetheme.php당신은 당신이 그 (것)들을 효율적이고 신뢰성이 방법을 사용하여 찾는 방법을 배울 필요가있을 것이다, 그래서 당신이 더 필요 수있는 CSS에 추가로 ... 등.
majick 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.