วิธีการรวมรหัสเฉพาะในหน้าเฉพาะ?


14

ฉันเรียนรู้เกี่ยวกับปลั๊กอินและรหัสย่อ ฉันสังเกตเห็นว่าเมื่อฉันเปิดใช้งานปลั๊กอินโค้ดของมันจะถูกโหลดในทุกหน้าของฉัน - แม้แต่หน้าเว็บที่ไม่มีรหัสย่อของฉัน (ฉันไม่ได้หมายถึงเนื้อหากับหน้าผู้ดูแลระบบ) ในหน้าเนื้อหาบางหน้าฉันใช้รหัสย่อเฉพาะและในหน้าเนื้อหาอื่น ๆ ฉันไม่ - แต่ในกรณีใด ๆ รหัสของปลั๊กอินจะถูกโหลด ฉันจะสร้างปลั๊กอินให้รวมเฉพาะในหน้าเว็บที่ใช้รหัสย่อได้อย่างไร

รายละเอียดเพิ่มเติม:

สมมติว่าฉันมีปลั๊กอินที่สร้างกล่องรวมภาพ ฉันเปิดใช้งานปลั๊กอิน ในหน้า "ภาพที่น่าสนใจ" ของฉันฉันใช้รหัสย่อเพื่อสร้างกล่องรวมภาพ เมื่อฉันตรวจสอบดูแหล่งที่มาในหน้า "เกี่ยวกับ" ของฉันซึ่งไม่ได้ใช้รหัสย่อของไลท์บ็อกซ์ฉันเห็นว่าโค้ดของปลั๊กอิน Lightbox ถูกโหลดแล้ว หน้าของฉันจะโหลดเร็วขึ้นถ้าฉันเขียนปลั๊กอินของฉันเพื่อให้รหัสของมันถูกโหลดบนหน้าเว็บที่จำเป็นเท่านั้น เป็นไปได้ไหม มิฉะนั้นฉันจะมีรหัสสำหรับปลั๊กอินจำนวนมากที่โหลดบนหน้าเว็บโดยไม่จำเป็น ความคิดใด ๆ


1
คุณกำลังพยายามจัดคิวบางอย่างหรือพยายามรันสคริปต์ PHP บนหน้าเว็บที่มีรหัสย่อใช่หรือไม่
mor7ifer

+1 @ m0r7if3r - ฉันอยากจะเข้าใจว่า .. วิธีการจะแตกต่างกันมาก
krembo99

@ mrOr7if3r ขอบคุณสำหรับข้อความ ตัวอย่างเช่นสมมติว่าฉันมีปลั๊กอินของ Google Maps ต้องโหลดปลั๊กอินนั้นในทุกหน้าหรือไม่ - คือหน้าเว็บที่ไม่ใช้ปลั๊กอินหรือไม่? สมมติว่าฉันมีหน้า "เกี่ยวกับ" ซึ่งไม่มีรหัสย่อของ Google แผนที่อยู่ หากฉันดูที่มาดูฉันเห็นว่ามีการโหลดรหัสของปลั๊กอินในหน้านั้น (แม้ว่าจะไม่ได้ใช้งานก็ตาม) โค้ดสำหรับปลั๊กอินต้องโหลดทุกหน้าหรือไม่ ขอบคุณ
Laxmidi

คำถามที่ดีที่ imho นำไปสู่การปฏิบัติที่ดีที่สุด (ใหม่) เนื่องจาก WP ตอนนี้ทำให้เราสามารถจัดคิวสคริปต์ได้ทุกเวลา
Raphael

คำตอบ:


9

WP v3.3 ทำให้เราสามารถเรียกใช้ wp_enqueue_script ที่อยู่ตรงกลางของหน้า ตั๋ว 9346

สิ่งนี้ทำให้ง่ายต่อการรวม JS ของคุณด้วยความละเอียดที่ดีกว่า (เมื่อใช้รหัสย่ออย่างน้อย) ที่นี่ jquery จะถูกรวมเมื่อรหัสสั้นของเราถูกไล่ออก

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
นี่คือสิ่งที่ควรทำ IMO
Raphael

1
ยอดเยี่ยมฉันไม่ได้ตระหนักว่าตอนนี้เป็นไปได้ที่จะเรียกใช้ wp_enqueue_script ที่กึ่งกลางหน้า วิธีที่สะอาดกว่ามากในการโหลดสคริปต์ / css เมื่อจำเป็นเท่านั้น!
Curran ริก

2

ตรวจสอบตัวแปร UI ของผู้ดูแลระบบ

รายการเมนูหนึ่งรายการเป็นกรณีพิเศษ: ความคิดเห็นเนื่องจากได้รับการลงทะเบียนโดยใช้add_WHATEVER_(submenu)page()API

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

สิ่งเหล่านี้ไม่ได้รับการยินยอมและฮาร์ดโค้ดลงในแกน wp โปรดทราบว่าไม่ได้ตั้งค่าทั้งหมดในทุกหน้า

ขอลงใน hooks UI ของผู้ดูแลระบบเฉพาะหน้า

จากนั้นยังมีตะขอพิเศษสำหรับแต่ละหน้าซึ่งคุณสามารถดูadmin-footer.phpและadmin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

ตัวอย่างบางส่วนในโลกแห่งความจริง: หน้าจอโพสต์

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

จากนั้นยังมีสิ่ง$hook_suffixที่คุณสามารถตรวจสอบเพื่อรับคิวสคริปต์ได้ทันทีเมื่อคุณเชื่อมการกระทำของคุณ:

do_action( 'admin_enqueue_scripts', $hook_suffix );

ปรับปรุง

ที่จะได้รับการเข้าถึงได้ง่ายขึ้น (1 คลิก) ข้อมูลนี้ / ข้อมูลที่เราสร้างมีอิสระที่เป็นมิตรนักพัฒนาปลั๊กอินชื่อ"(WCM) ปัจจุบันผู้ดูแลระบบข้อมูล"ซึ่งเป็นที่มีอยู่บนGitHub สามารถปลั๊กอินในอนาคตอันใกล้นอกจากนี้ยังพบได้ในอย่างเป็นทางการ wp.org พื้นที่เก็บข้อมูล

สกรีนช็อต

วิธีแสดงตัวอย่างสิ่งที่คุณได้รับจากปลั๊กอินนี้:

จอภาพ

ตะขอ

Globals


0

สามารถทำบางสิ่งบางอย่างตามสายของ (ใน header.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

ตรวจสอบว่าการโหลดปัจจุบันเป็นหน้าหรือโพสต์แล้วคว้าเนื้อหาและค้นหารหัสย่อของคุณ เมื่อค้นหามันจะดำเนินการกับฟังก์ชั่นของคุณ


ขอบคุณสำหรับข้อความ. ฉันลองใช้โซลูชันของคุณ แต่น่าเสียดายที่ฉันไม่สามารถใช้งานได้
Laxmidi

ถูกเพิ่มไปยังส่วนหัวหรือไม่
Noel Tock

1
คุณเคยเห็นget_shortcode_regex()ไหม
kaiser

0

วิธีที่ง่ายที่สุดคือตรวจสอบรหัสย่อ

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
นอกจากนี้get_shortcode_regex()การที่
kaiser

0

@kaiser ตั้งข้อสังเกตget_shortcode_regex()หลายครั้งในชุดข้อความนี้ฉันแค่คิดว่าฉันให้ตัวอย่างเกี่ยวกับวิธีการใช้งาน รหัสนี้นำมาจากget_shortcode_regex()หน้าอ้างอิงรหัส WordPress

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.