วิธีคิดในการลงทะเบียน / จัดคิวสคริปต์และ / หรือรูปแบบเพื่อใช้ในปลั๊กอินคืออะไร
ฉันเพิ่งสร้างปลั๊กอินอย่างง่ายสำหรับปลั๊กอินเพื่อเพิ่มอวตารผู้ใช้ / gravatar ด้วยรหัสย่อ ฉันมีตัวเลือกสไตล์ที่แตกต่างกันสำหรับการแสดงอวตาร (สี่เหลี่ยมจัตุรัสรอบ ฯลฯ ) และตัดสินใจที่จะวาง CSS โดยตรงในตัวย่อ
อย่างไรก็ตามฉันรู้แล้วว่านี่ไม่ใช่วิธีที่ดีเพราะมันจะทำ css ซ้ำทุกครั้งที่มีการใช้รหัสย่อบนหน้าเว็บ ฉันเคยเห็นวิธีการอื่น ๆ ในเว็บไซต์นี้และ wp codex ยังมีสองตัวอย่างของพวกเขาเองดังนั้นจึงเป็นการยากที่จะรู้ว่าวิธีใดที่สอดคล้องและรวดเร็วที่สุด
นี่คือวิธีที่ฉันรู้อยู่ในขณะนี้:
วิธีที่ 1: รวมโดยตรงในย่อ - นี่คือสิ่งที่ฉันกำลังทำอยู่ในปลั๊กอิน แต่ดูเหมือนจะไม่ดีเพราะมันทำซ้ำรหัส
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' ) );
วิธีที่ 2: ใช้คลาสสำหรับจัดคิวสคริปต์หรือสไตล์ตามเงื่อนไข
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();
วิธีที่ 3: การใช้ 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' );
วิธีที่ 4: การใช้ 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();
ดีที่สุดเพราะจะช่วยให้มั่นใจได้ว่าสคริปต์และสไตล์จะโหลดหนึ่งครั้งหากเนื้อหาโพสต์มีรหัสย่อไม่ว่าจะใช้รหัสย่อหลายรายการก็ตาม แม้ว่ามันอาจจะใช้ไม่ได้กับรหัสย่อที่ใช้ในวิดเจ็ตหรือในแถบด้านข้าง แต่ก็ไม่แน่ใจ หากเป็นปลั๊กอินก็จะไม่แนะนำให้คุณผูกสคริปต์กับรหัสย่อเพราะบางคนอาจเรียกใช้ฟังก์ชั่นของคุณแทนการย่อเพื่อรับผลลัพธ์ที่ต้องการ