내 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
직접 전화 하면 워드 프레스 기능을 사용할 수 없습니다.
PHP 기반 스타일 시트에 WordPress를로드하는 간단한 방법 중 하나는 템플릿 파일을로드하는 사용자 지정 예약 URL 인 WordPress에 엔드 포인트를 추가하는 것입니다.
거기에 도착하려면 :
-
에 엔드 포인트를 등록
'init'
과 함께add_rewrite_endpoint()
. 이름을 지어 봅시다'phpstyle'
. -
에 후크
'request'
와 확실히 엔드 포인트 변수하게'phpstyle'
설정된 경우 비어 있지 않습니다. 크리스토퍼 데이비스의 우수한 A (대부분) WordPress Rewrite API 에 대한 완벽한 안내서를 읽고 여기에서 무슨 일이 일어나고 있는지 이해하십시오. -
'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를 두 번 로드해야합니다 . 적극적인 캐싱 없이는하지 마십시오.
답변
를 통해 출력을로드 하여이 작업을 수행 할 수 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');