วิธีเพิ่มข้อมูลจาวาสคริปต์ในส่วนท้ายที่ต้องการ jQuery


27

ฉันรู้ว่าฉันสามารถเพิ่มไฟล์สคริปต์ลงในส่วนท้ายของ wordpress ที่ต้องการ jquery โดยใช้รหัสนี้:

<?php
function my_scripts_method() {
   // register your script location, dependencies and version
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery'),
       '1.0',
       true);
   // enqueue the script
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

แต่ถ้าฉันต้องการเพิ่มเพียงส่วนย่อยของ jquery แบบอินไลน์ไม่ใช่ไฟล์ วิธีนี้สามารถทำได้

แก้ไข

ฉันรู้ว่าฉันสามารถใช้สคริปต์นี้เพื่อเพิ่มบางอย่างลงในส่วนท้าย:

<?php
function myscript() {
?>
<script type="text/javascript">
 // This depends on jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');

แต่ฉันจะระบุสคริปต์ที่ใช้ต้อง jqueryให้ทำงานได้อย่างไร


ไม่มีฟังก์ชั่นในตัวที่จะทำสิ่งนี้ที่ฉันรู้ว่ามันเป็นเหตุผลwp_register_scriptและwp_enqueue_scriptมีอยู่ แต่คุณสามารถตรวจสอบการใช้ jquery เอง
Wyck

2
ขออภัยสำหรับ downvote แต่ฉันไม่คิดว่าคุณเข้าใจคำถามของฉัน ฉันได้อ่านโคเด็กซ์และรู้เกี่ยวกับตัวเลือกนี้แล้ว แต่ฉันไม่ต้องการwp_enqueue_scriptไฟล์สคริปต์ลงในส่วนท้ายของฉันต้องการเพิ่มตัวอย่างในส่วนท้ายที่ต้องการ jquery ฉัน downvote คำตอบที่นำมาโดยตรงจาก codex ฉันอ่านโคเด็กซ์และไม่พบคำตอบนั่นคือสาเหตุที่ฉันถามคำถาม หากคุณเปลี่ยนเส้นทางฉันไปที่ codex อีกครั้งฉันลงคะแนน
Saif Bechan

ขอบคุณ wyck ฉันคิดว่าเป็นกรณีนี้ขอบคุณที่เข้าใจคำถามอย่างถูกต้อง ฉันคิดว่าฉันจะใช้สคริปต์ JS ภายนอกแทนเพื่อให้แน่ใจว่าสคริปต์สามารถทำงานได้
Saif Bechan

คำตอบ:


30

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการรวมกันของwp_enqueue_scriptและส่วนท้ายของการกระทำที่ Saif และ v0idless อ้างอิงแล้ว ฉันมักจะใช้ jQuery ในธีมและปลั๊กอินของฉัน แต่ฉันใส่สคริปต์อื่นทั้งหมดลงในส่วนท้ายเช่นกัน

วิธีที่ดีที่สุดในการจัดคิวจริง ๆ คือ:

function myscript() {
?>
<script type="text/javascript">
  if ( undefined !== window.jQuery ) {
    // script dependent on jQuery
  }
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );

function myscript_jquery() {
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );

แต่โค้ดนี้ถูกสมมติว่าคุณเป็นผู้รอคิวสคริปต์นั่นคือคุณกำลังทำสิ่งนี้ในปลั๊กอินหรือธีมของคุณเอง

ในขณะนี้ไม่มีวิธีเพิ่มสคริปต์ในบรรทัดไปยังส่วนท้ายของ WordPress และโหลดด้วยการอ้างอิง แต่มีทางเลือกอื่นถ้าคุณเต็มใจ

ทางเลือก

เมื่อ WordPress ทำงานกับสคริปต์มันจะโหลดมันไปยังวัตถุเพื่อติดตามมัน ภายในรายการมีวัตถุ 3 รายการ:

  • ลงทะเบียน
  • คิว
  • เสร็จแล้ว
  • ทำ

เมื่อคุณลงทะเบียนสคริปต์ครั้งแรกสคริปต์wp_register_scripts()จะถูกวางไว้ในรายการที่ลงทะเบียน เมื่อคุณwp_enqueue_script()สคริปต์มันจะถูกคัดลอกไปยังรายการคิว หลังจากถูกพิมพ์ไปยังหน้าเอกสารจะถูกเพิ่มไปยังรายการที่ทำเสร็จแล้ว

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

ใช้wp_script_is()เพื่อตรวจสอบว่ามีการระบุสคริปต์ไว้ที่ใด

function myscript() {
    if( wp_script_is( 'jquery', 'done' ) ) {
    ?>
    <script type="text/javascript">
      // script dependent on jQuery
    </script>
    <?php
    }
}
add_action( 'wp_footer', 'myscript' );

คุณอาจจะสามารถใช้รหัสเดียวกันนี้เพื่อบังคับให้ jQuery โหลดส่วนท้ายได้เช่นกัน แต่ฉันไม่ได้ทดสอบว่า ... ดังนั้นระยะทางของคุณจะแตกต่างกันไป


ข้อมูลโค้ดที่คุณระบุให้เป็นที่ยอมรับโดยมาตรฐานการพัฒนาปลั๊กอิน WordPress หรือไม่ ถ้าใช่ฉันจะใช้มันในปลั๊กอินของฉัน ... โปรดตอบฉันด้วยสิ่งนี้ ...
laraib

ตัวอย่างสุดท้าย? ปลั๊กอิน WordPress เลขที่ควรเสมอต้องการสคริปต์ enqueue การบังคับให้ jQuery โหลดนอกระบบคิวด้วยวิธีนี้เป็นสิ่งที่คุณควรทำบนไซต์ของคุณซึ่งคุณควบคุมสภาพแวดล้อม 100% มันเป็นความไม่เหมาะสมสำหรับปลั๊กอินที่จะทำอย่างนั้น
EAMann

ถ้างั้นขอยกตัวอย่างการทำงานให้หน่อยได้มั้ย ... ????
laraib

เพราะฉันกำลังพัฒนาปลั๊กอิน WordPress เป็นครั้งแรกและฉันชอบที่จะได้รับการยอมรับจากทีมงาน WordPress ... รอการตอบกลับของคุณโปรด .... ได้โปรดพูดเกี่ยวกับสิ่งนี้เพื่อที่ฉันจะสามารถสร้างและยอมรับปลั๊กอินของฉันได้ ...
laraib

12

ตั้งแต่ WordPress 4.5 wp_add_inline_script()คุณสามารถเพิ่มสคริปต์แบบอินไลน์โดย ในการเพิ่มข้อมูลโค้ด javascript ให้กับส่วนท้ายที่ต้องการ jQuery รหัสนี้จะช่วยคุณ

function enqueue_jquery_in_footer( &$scripts ) {

    if ( ! is_admin() )
        $scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'enqueue_jquery_in_footer' );

function theme_prefix_enqueue_script() {
   if(!wp_script_is('jquery', 'done')) {
     wp_enqueue_script('jquery');
   }
   wp_add_inline_script( 'jquery-migrate', 'jQuery(document).ready(function(){});' );
}
add_action( 'wp_enqueue_scripts', 'theme_prefix_enqueue_script' );

wp_add_inline_script ด้วย jQuery ของ wordpress


1

ใช้การwp_footerกระทำเช่นนี้:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERT SCRIPT HERE **/
</script>
<?php
}

1
นี่ไม่ใช่คำตอบที่ดี ฉันถามว่าฉันจะระบุสคริปต์ที่ต้องการ jQuery ได้อย่างไร หากผู้ใช้ไม่มี jQuery ที่กำลังรันการใช้งานของคุณจะไม่ทำงาน
Saif Bechan

0

ฉันรู้ว่าOPต้องการระบุข้อกำหนดเกี่ยวกับ jQuery และผู้เขียน WordPress ควรอนุญาตให้ส่วนย่อยติดตั้งไฟล์สคริปต์ แต่พวกเขาทำไม่ได้ดังนั้นฉันแนะนำไม่พยายามบังคับมัน หากคุณไม่ต้องการยุ่งกับคิวหรือคำสั่งของมันเลยอย่างฉัน (เพราะฉันใช้ปลั๊กอินอื่นที่รวมและเพิ่มประสิทธิภาพสคริปต์) ดังนั้นคำตอบก็คือใช้wp_footerแอ็คชั่นเช่นนี้:

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // your snippet
            }
        </script>
        <?php
    }
    , 21 # after enqueued footer scripts
);

-2

คุณสามารถใช้wp_footerแอคชั่นนี้ได้ ตรวจสอบ Codex สำหรับwp_footer


ฉันรู้ แต่คุณจะระบุได้อย่างไรว่าสคริปต์ที่คุณเพิ่มลงในส่วนท้ายนั้นขึ้นอยู่กับ jquery ตรวจสอบการแก้ไขของฉันให้เป็นเรื่องน่าสนใจยิ่งขึ้น
Saif Bechan

คุณยังสนใจที่จะอ่านรอบ ๆ codex ก่อนที่จะโหวตคำตอบของผู้คนหรือไม่? คุณเคยอ่านเกี่ยวกับการin_footerโต้แย้งwp_enqueue_scriptหรือไม่? อ่าน: codex.wordpress.org/Function_Reference/wp_enqueue_script มันบอกวิธีใช้กับwp_footerแอ็คชั่น
Rutwick Gangurde
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.