Apa cara ide untuk mendaftar / membuat skrip dan / atau gaya untuk digunakan dalam plugin?
Baru-baru ini saya membuat plugin plugin sederhana untuk menambahkan pengguna avatar / gravatar dengan kode pendek. Saya memiliki opsi gaya yang berbeda untuk menampilkan avatar (persegi, bulat, dll.) Dan memutuskan untuk meletakkan css langsung di shortcode itu sendiri.
Namun, saya menyadari sekarang ini bukan pendekatan yang baik karena akan mengulangi css setiap kali kode pendek digunakan pada halaman. Saya telah melihat beberapa pendekatan lain di situs ini dan wp codex bahkan memiliki dua contoh sendiri sehingga sulit untuk mengetahui pendekatan apa yang paling konsisten dan tercepat.
Berikut adalah metode yang saat ini saya ketahui:
Metode 1: Sertakan langsung dalam kode pendek - Ini adalah apa yang saya lakukan saat ini di plugin, tetapi sepertinya tidak bagus karena ini mengulangi kode.
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' ) );
Metode 2: Gunakan kelas untuk skrip enqueueing atau gaya kondisional
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();
Metode 3: Menggunakan 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' );
Metode 4: Menggunakan 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();
yang terbaik karena akan memastikan bahwa skrip dan gaya akan memuat sekali jika konten posting memiliki kode pendek terlepas dari beberapa penggunaan kode pendek. Meskipun mungkin tidak berfungsi untuk penggunaan kode pendek di widget atau di bilah sisi, tidak yakin sekalipun. Jika itu untuk sebuah plugin maka saya tidak akan merekomendasikan Anda untuk mengikat skrip dengan shortcode karena beberapa orang mungkin memanggil fungsi Anda alih-alih shortcode untuk mendapatkan output yang diinginkan.