나는이 질문에 늦게 대답하고 있지만 Ian 이 오늘 wp-hackers 목록 에서이 스레드 를 시작한 이래로 내가 작업 한 일부 플러그인에 이러한 기능을 추가 할 계획을 고려할 때 특히 대답 할 가치가 있다고 생각했습니다.
고려해야 할 방법은 첫 페이지로드를 점검하여 단축 코드가 실제로 사용되는지 확인한 다음 단축 코드 사용 상태를 사후 메타 키에 저장하는 것입니다. 방법은 다음과 같습니다.
단계별 사용법
$shortcode_used
플래그를로 설정하십시오 'no'
.
- 단축 코드 기능 자체에서
$shortcode_used
플래그를로 설정하십시오 'yes'
.
- WordPress가 단축 코드를 처리 한 후
'the_content'
후크 우선 순위 12
를 설정 ''
하고 키를 사용하여 포스트 메타를 점검하십시오 "_has_{$shortcode_name}_shortcode"
. 게시물 ID에 대해 게시 메타 키가 없으면 값 ''
이 반환됩니다.
'save_post'
사용자가 단축 코드 사용법을 변경하는 경우 후크를 사용하여 해당 게시물에 대한 지속 플래그를 지우는 게시물 메타를 삭제하십시오.
- 또한
'save_post'
후크 wp_remote_request()
에서 비 차단 HTTP GET을 게시물의 퍼머 링크로 전송하여 첫 페이지로드 및 지속적 플래그 설정을 트리거합니다.
- 마지막으로을 설정
'wp_print_styles'
하고의 값을 포스트 메타를 확인 'yes'
, 'no'
또는 ''
키를 사용하여 "_has_{$shortcode_name}_shortcode"
. 값이 'no'
외부를 제공하지 않으면 값이 'yes'
아니면 ''
계속해서 외부 서비스를 제공하십시오.
그리고 그렇게해야합니다. 이 플러그인이 어떻게 작동하는지 보여주는 플러그인 예제를 작성하고 테스트했습니다.
플러그인 코드 예
플러그인 은 페이지 [trigger-css]
의 <h2>
요소를 흰색에서 빨간색으로 설정하여 작동하는 것을 쉽게 볼 수 있는 짧은 코드 에서 깨어납니다 . 이 CSS 파일을 css
포함 하는 서브 디렉토리를 가정 style.css
합니다.
/*
* Filename: css/style.css
*/
h2 {
color: white;
background: red;
}
아래는 작동하는 플러그인의 코드입니다.
<?php
/**
* Plugin Name: CSS on Shortcode
* Description: Shows how to conditionally load a shortcode
* Author: Mike Schinkel <mike@newclarity.net>
*/
class CSS_On_Shortcode {
/**
* @var CSS_On_Shortcode
*/
private static $_this;
/**
* @var string 'yes'/'no' vs. true/false as get_post_meta() returns '' for false and not found.
*/
var $shortcode_used = 'no';
/**
* @var string
*/
var $HAS_SHORTCODE_KEY = '_has_trigger-css_shortcode';
/**
*
*/
function __construct() {
self::$_this = $this;
add_shortcode( 'trigger-css', array( $this, 'do_shortcode' ) );
add_filter( 'the_content', array( $this, 'the_content' ), 12 ); // AFTER WordPress' do_shortcode()
add_action( 'save_post', array( $this, 'save_post' ) );
add_action( 'wp_print_styles', array( $this, 'wp_print_styles' ) );
}
/**
* @return CSS_On_Shortcode
*/
function this() {
return self::$_this;
}
/**
* @param array $arguments
* @param string $content
* @return string
*/
function do_shortcode( $arguments, $content ) {
/**
* If this shortcode is being used, capture the value so we can save to post_meta in the 'the_content' filter.
*/
$this->shortcode_used = 'yes';
return '<h2>THIS POST WILL ADD CSS TO MAKE H2 TAGS WHITE ON RED</h2>';
}
/**
* Delete the 'has_shortcode' meta value so that it can be regenerated
* on first page load in case shortcode use has changed.
*
* @param int $post_id
*/
function save_post( $post_id ) {
delete_post_meta( $post_id, $this->HAS_SHORTCODE_KEY );
/**
* Now load the post asynchronously via HTTP to pre-set the meta value for $this->HAS_SHORTCODE_KEY.
*/
wp_remote_request( get_permalink( $post_id ), array( 'blocking' => false ) );
}
/**
* @param array $args
*
* @return array
*/
function wp_print_styles( $args ) {
global $post;
if ( 'no' != get_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, true ) ) {
/**
* Only bypass if set to 'no' as '' is unknown.
*/
wp_enqueue_style( 'css-on-shortcode', plugins_url( 'css/style.css', __FILE__ ) );
}
}
/**
* @param string $content
* @return string
*/
function the_content( $content ) {
global $post;
if ( '' === get_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, true ) ) {
/**
* This is the first time the shortcode has ever been seen for this post.
* Save a post_meta key so that next time we'll know this post uses this shortcode
*/
update_post_meta( $post->ID, $this->HAS_SHORTCODE_KEY, $this->shortcode_used );
}
/**
* Remove this filter now. We don't need it for this post again.
*/
remove_filter( 'the_content', array( $this, 'the_content' ), 12 );
return $content;
}
}
new CSS_On_Shortcode();
스크린 샷 예
다음은 일련의 스크린 샷입니다.
기본 게시물 편집기, 내용 없음
게시물 표시, 내용 없음
[trigger-css]
단축 코드가있는 기본 포스트 편집기
[trigger-css]
단축 코드가있는 포스트 디스플레이
100 %이면 확실하지 않습니다
위의 내용은 거의 모든 경우에 작동해야한다고 생각하지만이 코드를 작성했을 때 100 % 확신 할 수는 없습니다. 작동하지 않는 상황을 찾을 수 있다면 정말로 알고 싶습니다. 방금 추가 한 일부 플러그인에서 코드를 수정할 수 있습니다. 미리 감사드립니다.