Bu soruyu cevaplamaya geç kaldım, ancak Ian bu konuya wp-hacker'lar listesinde bugün başladığından beri , özellikle üzerinde çalıştığım bazı eklentilere böyle bir özellik eklemeyi planladığımı düşünerek cevap vermeye değer olduğunu düşünmeme neden oldu.
Dikkate alınacak bir yaklaşım, kısa kodun gerçekten kullanılıp kullanılmadığını görmek için ilk sayfa yükünü kontrol etmek ve ardından kısa kod kullanım durumunu bir post meta anahtarına kaydetmektir. İşte nasıl:
Adım Adım Nasıl Yapılır
- Bir
$shortcode_used
bayrak olarak ayarlayın 'no'
.
- Kısa kod işlevinde kendisi
$shortcode_used
bayrağı ayarlar 'yes'
.
- WordPress kısa kodları işledikten sonra bir
'the_content'
kanca önceliği 12
belirleyin ''
ve tuşu kullanarak post meta kontrol edin "_has_{$shortcode_name}_shortcode"
. ( ''
Posta kimliği için bir yazı meta anahtarı bulunmadığında değeri döndürülür.)
'save_post'
Kullanıcının kısa kod kullanımını değiştirmesi durumunda, söz konusu yazının kalıcı bayrağını temizleyerek post metasını silmek için bir kanca kullanın .
- Ayrıca
'save_post'
kancada wp_remote_request()
, ilk sayfa yükünü ve kalıcı bayrağın ayarını tetiklemek için yazının kendi kalıcı bağlantısına engelleyici olmayan bir HTTP GET göndermek için kullanın .
- Son olarak bir set
'wp_print_styles'
ve bir değeri için yazılan meta kontrol 'yes'
, 'no'
veya ''
tuşunu kullanarak "_has_{$shortcode_name}_shortcode"
. Eğer değer 'no'
harici değilse. Değer ise 'yes'
veya ''
devam edip dış hizmet etmek.
Ve bu yapmalı. Bunun nasıl çalıştığını göstermek için bir örnek eklenti yazdım ve test ettim.
Örnek Eklenti Kodu
Eklenti , sayfadaki öğeleri kırmızıya beyaza [trigger-css]
ayarlayan bir kısa kodla uyanır, <h2>
böylece çalışmasını kolayca görebilirsiniz. İçinde bu CSS bulunan dosyayı css
içeren bir alt dizini varsayar style.css
:
/*
* Filename: css/style.css
*/
h2 {
color: white;
background: red;
}
Ve aşağıda çalışan bir eklenti kodudur:
<?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();
Örnek Ekran Görüntüleri
İşte bir dizi ekran görüntüsü
Temel Yazı Düzenleyicisi, İçerik Yok
Mesaj Görüntüleme, İçerik Yok
[trigger-css]
Kısa Kodlu Temel Yazı Düzenleyicisi
[trigger-css]
Kısa Kodlu Mesaj Görüntüleme
% 100 olup olmadığından emin değil
Yukarıdakilerin hemen hemen tüm durumlarda çalışması gerektiğine inanıyorum, ancak bu kodu henüz yazdığım için% 100 emin olamam. İşe yaramadığı durumları bulabilirseniz gerçekten bilmek isterim, bu yüzden kodu yeni eklentilere ekledim. Şimdiden teşekkürler.