Eklentilerde kullanılmak üzere komut dosyalarını ve / veya stilleri kaydetmenin / bunları kodlamanın fikir yolu nedir?
Kısa süre önce kullanıcı avatarını / gravatarını eklemek için basit bir eklenti yaptım . Avatarı (kare, yuvarlak vb.) Görüntülemek için farklı stil seçeneklerine sahibim ve css'i doğrudan kısa kodun içine koymaya karar verdim.
Ancak, bunun iyi bir yaklaşım olmadığını anladım, çünkü kısa kod bir sayfada her kullanıldığında css'yi tekrarlayacaktır. Bu sitede birkaç başka yaklaşım gördüm ve wp kodeksi kendi iki örneğine bile sahipti, bu nedenle hangi yaklaşımın en tutarlı ve en hızlı olduğunu bilmek zor.
İşte şu anda farkında olduğum yöntemler:
Yöntem 1: Doğrudan kısa kod içine dahil et - Bu eklenti şu anda ne yapıyorum, ancak kodu tekrar ettiği için iyi görünmüyor.
class My_Shortcode {
function handle_shortcode( $atts, $content="" ) {
/* simply enqueue or print the scripts/styles in the shortcode itself */
?>
<style type="text/css">
</style>
<?php
return "$content";
}
}
add_shortcode( 'myshortcode', array( 'My_Shortcode', 'handle_shortcode' ) );
Yöntem 2: Kodları veya stilleri koşullu olarak kodlamak için sınıf kullanın
class My_Shortcode {
static $add_script;
static function init() {
add_shortcode('myshortcode', array(__CLASS__, 'handle_shortcode'));
add_action('init', array(__CLASS__, 'register_script'));
add_action('wp_footer', array(__CLASS__, 'print_script'));
}
static function handle_shortcode($atts) {
self::$add_script = true;
// shortcode handling here
}
static function register_script() {
wp_register_script('my-script', plugins_url('my-script.js', __FILE__), array('jquery'), '1.0', true);
}
static function print_script() {
if ( ! self::$add_script )
return;
wp_print_scripts('my-script');
}
}
My_Shortcode::init();
Yöntem 3: kullanma get_shortcode_regex();
function your_prefix_detect_shortcode() {
global $wp_query;
$posts = $wp_query->posts;
$pattern = get_shortcode_regex();
foreach ($posts as $post){
if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
&& array_key_exists( 2, $matches )
&& in_array( 'myshortcode', $matches[2] ) )
{
// css/js
break;
}
}
}
add_action( 'wp', 'your_prefix_detect_shortcode' );
Yöntem 4: kullanma has_shortcode();
function custom_shortcode_scripts() {
global $post;
if( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'myshortcode') ) {
wp_enqueue_script( 'my-script');
}
}
add_action( 'wp_enqueue_scripts', 'custom_shortcode_scripts');
Method 4: Using has_shortcode();
en iyisi, çünkü yazı içeriği birden fazla kısa kod kullanımına bakmaksızın kısa kod içeriyorsa, komut dosyalarının ve stillerin bir kez yüklenmesini sağlayacak. Widget'lerde veya kenar çubuğunda kısa kod kullanımları için işe yaramasa da, emin değilim. Bir eklenti için, o zaman komut dosyalarını kısa kodla bağlamanızı tavsiye etmem, çünkü bazıları istenen çıktıyı elde etmek için işlevinizi kısa kod yerine çağırabilir.