인라인 스타일을 사용하지 않고 플러그인에 CSS 옵션을 추가하려면 어떻게합니까?


26

최근에 짧은 코드를 사용하여 게시물이나 페이지에 jQuery 슬라이더를 추가 하는 플러그인 WP Coda Slider를 출시했습니다 . 다음 버전에서 옵션 페이지를 추가하고 일부 CSS 옵션을 포함하고 싶지만 플러그인이 스타일 선택을 인라인 CSS로 추가하고 싶지 않습니다. CSS 파일이 호출 될 때 선택 사항을 동적으로 추가하고 싶습니다.

또한 보안 문제로 fopen을 사용하거나 파일에 쓰지 않기를 원합니다.

이와 같은 것이 달성하기 쉽습니까 아니면 스타일 선택을 페이지에 직접 추가하는 것이 더 나을까요?


@Chris_O : 나는 거의 똑같은 것을 생각하고 있습니다. 내가 원하는 것은 파일 이름 대신 함수 이름으로 wp_enqueue_style()(및 wp_enqueue_script()) 을 호출 하고 내 함수가 CSS (또는 JS)를 생성하지만 링크 된 스타일 시트를 통해 궁극적으로 포함시키는 방법입니다. 내가 아는 한, wp_equeue_*()기능으로 는 불가능합니다 . 어쩌면 우리는 trac 티켓을 제출해야합니까?
MikeSchinkel

@ MikeSchinkel : wp_enqueue 함수를 사용하는 매우 논리적 인 방법입니다. 해당 티켓에 지원을 추가 할 것입니다.
Chris_O

@Chris_O : 방금 @Doug 의 답변을 보았습니다. 나는 당신이 이미 알고 있다는 잘못된 가정을했습니다. 내가 당신을 여기에서 지적했을 것이 아니라는 것을 깨달았습니다 : wordpress.stackexchange.com/questions/556/#562
MikeSchinkel

@ MikeSchinkel 나는 wp_register와 wp_enqueue에 대해 알고있었습니다. 플러그인 옵션 페이지의 값을 기반으로 스타일 시트를 작성하는 방법을 찾고있었습니다.
Chris_O

@Chris_O : 아. 나는 해결책을 배운 후에도 다른 사람들이 해결책에서 누락 된 것을 여전히 볼 수있는 사람으로 생각하고 싶습니다. ) OTOH, 이것은 내가 놓친 것입니다. 죄송합니다. :)
MikeSchinkel

답변:


27

사용 wp_register_stylewp_enqueue_style스타일 시트를 추가 할 수 있습니다. 에 스타일 시트 링크를 추가하지 마십시오 wp_head. 큐 스타일을 사용하면 필요한 경우 다른 플러그인이나 테마에서 스타일 시트를 수정할 수 있습니다.

스타일 시트는 .php 파일이 될 수 있습니다.

wp_register_style('myStyleSheet', 'my-stylesheet.php');
wp_enqueue_style( 'myStyleSheet');

my-stylesheet.php 는 다음과 같습니다 :

<?php
// We'll be outputting CSS
header('Content-type: text/css');

include('my-plugin-data.php');    
?>

body {
  background: <?php echo $my_background_variable; ?>;
  font-size: <?php echo $my_font_size; ?>;
}

3
또한 옵션 페이지의 값이 변경 될 때만 값이 변경되므로 저장시 CSS 파일을 생성 할 수 있습니다. 플러그인 디렉토리에도 CSS 파일을 저장할 수 있으므로 include 등을 사용하여 각 CSS 요청에서 PHP 파일을 실행하는 것보다 약간 더 성능이 좋습니다.
hakre

1
감사! 잘 작동했습니다. 그러나 치명적인 오류가 발생했습니다. get_option () ...은 정의되지 않았습니다. 그런 다음 wp-config.php 파일을로드 한 다음 문제를 해결했습니다.
Sumith Harshan

Sumith, 사용자 정의 CSS 파일에서 get_option을 어떻게 사용했는지 설명 할 수 있습니까? 많은 감사합니다!
Antonio Petricca

10

CSS 파일을 동적으로 빌드 한 다음로드하면 특히 CSS에 WP를 통해 처리 될 변수가있는 경우 CSS 파일을 추가하는 매우 낮은 대역폭의 처리량에 막대한 성능 부담이 발생합니다. 한 페이지로드에 대해 두 개의 다른 파일이 생성되므로 WP는 두 번 시작되고 모든 DB 쿼리를 두 번 실행하며 큰 혼란입니다.

슬라이더가 한 페이지에만 있고 스타일을 동적으로 설정하려면 스타일 블록을 헤더에 추가하는 것이 가장 좋습니다.

성능 순서대로 :

  1. 헤더에 작은 스타일 블록을 추가하고 동적으로 생성-매우 빠름
  2. wp_enqueue_style-Medium을 통해 비 동적 스타일 시트 추가
  3. wp_enqueue_style을 통해 동적 스타일 시트 추가-매우 느림

@ Dan-gayle 아주 좋은 지적입니다. 플러그인은 둘 이상의 페이지에서 사용할 수 있으며 일부 사용자는 2 또는 3 페이지에서 플러그인을 사용하고 있습니다. 짧은 정적 코드가있는 페이지의 현재 정적 스타일 시트와 js 만 대기열에 넣습니다.
Chris_O

난 당신이 내 대답을 투표했지만 Dan Gayle에 동의합니다. 작은 CSS 블록을 wp_head에 추가하면 모든 페이지 뷰에서 개별 스타일 시트를 다운로드해야하는 것 (쇼트 코드가있는 몇몇 포스트 / 페이지로 제한 되더라도)보다 성능면에서 훨씬 좋습니다. 처음에 별도의 스타일 시트를 사용하는 유일한 이유 는 브라우저에서 캐시 할 수 있기 때문 입니다. 동적 스타일 시트를 캐시 할 수 없습니다.
Doug

2
이것이 여전히 일에 관한 올바른 방법입니까?
Dave Kiss

2

이것이 내가 보통하는 방법입니다.

function build_stylesheet_url() {
    echo '<link rel="stylesheet" href="' . $url . 'stylesheetname.css?build=' . date( "Ymd", strtotime( '-24 days' ) ) . '" type="text/css" media="screen" />';
}

function build_stylesheet_content() {
    if( isset( $_GET['build'] ) && addslashes( $_GET['build'] ) == date( "Ymd", strtotime( '-24 days' ) ) ) {
        header("Content-type: text/css");
        echo "/* Something */";
        define( 'DONOTCACHEPAGE', 1 ); // don't let wp-super-cache cache this page.
        die();
    }
}

add_action( 'init', 'build_stylesheet_content' );
add_action( 'wp_head', 'build_stylesheet_url' );

1

나는이 ilk의 모든 권장 사항에 어려움을 겪었습니다. 어쩌면 조금 두껍거나 공헌자가 공통의 손길을 잃었을 수도 있습니다.

나는 플러그인 PHP 파일에서 이것을 코딩하기로 결정했다.

echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/css.css' type='text/css' rel='stylesheet' />";
echo "<link href='http://www.brittany-gite-holidays.co.uk/wp-content/plugins/flexavailability/css/public.css' rel='stylesheet' type='text/css'/>";

작동하는 것 같습니다. 플러그인을 사용하는 페이지에만로드됩니다. 그것은 h1 태그 뒤에로드됩니다. 그것이 더 효율적이거나 분명한 방법을 알 수 없습니다.

.... 그러나 아마도 틀렸을 것입니다-나는 조금 두껍다 고 말했습니다.


<link>페이지 헤드 에만 요소를 로드해야합니다.
shea

예스. CSS가 페이지 상단에서 아래쪽으로 모든 것에 영향을 미치기를 원하기 때문입니다. h1 태그 다음에 오는 내용에만 영향을 미칩니다. 나는 예제를 작동시킬 수 없었습니다 (나쁘게 설명되어 있다고 생각합니다). 테스트 HTML에서 직접 시도해보십시오. 내가 틀렸다면 :)
chazza

@chazza 그게 유일한 이유는 아닙니다. body 태그를 작성한 후 브라우저가 스타일을 감지하면 해당 스타일을로드하고 적용 할 때까지 다른 스타일을 중지합니다. 이는 성능에 좋지 않으며 스타일이 지정되지 않은 텍스트의 화면 리플 로우 및 플래시로 이어집니다. 그러나 실제로 중요하지 않은 경우 말한 것처럼 해당 CSS 파일을 던져 넣으십시오. 나는 항상 그것을하고, 하루가 끝나면 괜찮습니다. 최적은 아니지만 괜찮습니다.
Dan Gayle

0

Wordpress 3.3 이후 업데이트

테마 / 플러그인 옵션을 기반으로 스타일을 동적으로 추가하는 데 사용할 수있는 wp_add_inline_style 이라는 함수가 있습니다. 이것은 빠르고 효율적인 작은 css 파일을 헤드에 추가하는데 사용될 수 있습니다.

<?php
function myprefix_scripts() {

    wp_enqueue_style('name-of-style-css', plugin_dir_path(__FILE__) . '/css/ccsfilename.css');

    $css = get_option( 'loader_css', 'default css goes here for when there is no value' );

    //or for Example
    $color = get_option( 'custom_plugin_color', 'red' ); //red is default value if value is not set
    $css = ".mycolor{
                background: {$color};
           }";

    wp_add_inline_style('name-of-style-css', $css);

}

add_action( 'wp_enqueue_scripts', 'myprefix_scripts' );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.