วิธีเพิ่ม Javascript อย่างถูกต้องใน functions.php


11

ฉันต้องการลบลูกศรที่ดูน่าเกลียดซึ่งเป็นปุ่มมาตรฐานในตะกร้าสินค้าใน WooCommerce เพื่อให้บรรลุนี้ฉันพบเคล็ดลับของการเพิ่มรหัสต่อไปนี้ซึ่งควรลบลูกศรเมื่อเอกสารโหลด

ฉันคิดว่าฉันจะใส่มันลงไปใน ฉันจะทำอย่างนั้นได้อย่างไร

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

แก้ไข

ตกลง. ฉันได้ลองวิธีนี้แล้ว:

ทำไฟล์ชื่อ 'removeArrows.js' และวางไว้ในโฟลเดอร์ปลั๊กอินของฉัน สิ่งนี้มีเนื้อหาเหมือนกับรหัสต้นฉบับยกเว้น jQuery แทน $ จากนั้นฉันได้เพิ่มสิ่งต่อไปนี้ใน functions.php

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

ฉันไม่สามารถหาวิธีแสดงรหัสได้อย่างถูกต้อง สิ่งนี้ไม่ทำงาน ข้อเสนอแนะใด ๆ ที่จะทำให้งานนี้?

jQuery Snippet Source


มันบ้าไปแล้ว: คุณไม่สามารถแก้ไขลูกศรในโค้ดที่สร้างมันได้เหรอ? (หรือดาวน์โหลดจากแหล่งภายนอก) ในกรณีใด ๆ คุณสามารถแทนที่ทั้งสองในฟังก์ชันเดียวเพื่อหลีกเลี่ยงการอ่านและเขียน HTML ทั้งหมดในบล็อกรถเข็นสองครั้ง ผมไม่ทราบว่าวิธีการฉีดโดยตรงที่ลงในหน้าจาก functions.php แต่คุณสามารถบันทึกไว้ในแฟ้มสคริปต์แยกต่างหาก (ถ้าคุณไม่ได้มีหนึ่งคนที่คุณสามารถเพิ่มไปยัง) แล้วwp-enqueue-scriptมัน นอกจากนี้คุณยังจะต้องเปลี่ยน$s เป็นjQuery(ดูหน้าส่วนที่ 7)
Rupee

ไม่ฉันค่อนข้างแน่ใจว่าจะไม่สามารถลบออกก่อนแทรกได้ ถ้าทำได้ฉันก็ไม่สามารถหาวิธีที่จะทำได้ จุดดีเกี่ยวกับการเพิ่มลงในฟังก์ชั่นเดียว มันจะมีลักษณะเช่นนี้? $ (เอกสาร). ready (function () {$ (". woocommerce-cart"). html (ฟังก์ชั่น (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); ฉันจะตรวจสอบบทภาพยนตร์ ดูเหมือนจะซับซ้อนเล็กน้อย แต่ .. ขอบคุณ!
user2806026

ตกลง. ฉันลองวิธีนี้ ทำไฟล์ชื่อ 'removeArrows.js' และวางไว้ในโฟลเดอร์ปลั๊กอินของฉัน สิ่งนี้มีเนื้อหาเหมือนกับรหัสต้นฉบับยกเว้น jQuery แทน $ จากนั้นฉันเพิ่มสิ่งต่อไปนี้ลงใน functions.php; `ฟังก์ชัน wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', ไฟล์ ), อาร์เรย์ ('jquery'), '1.1', จริง); wp_enqueue_script ( 'my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (ขออภัยฉันไม่สามารถทราบวิธีการแสดงรหัสได้อย่างถูกต้อง) สิ่งนี้ไม่ทำงาน คุณช่วยฉันแก้ไขได้ไหม?
user2806026

1
กรุณายื่นแก้ไขและเพิ่มข้อมูลที่เกี่ยวข้องทั้งหมดโดยตรงกับคำถามของคุณ อย่าใช้ส่วนความคิดเห็นเพื่อเพิ่มรหัส
Pieter Goosen

คำตอบ:


11

การทำงาน$scrของคุณwp_register_script()ผิด ระบุว่า functions.php ของคุณอยู่ในปลั๊กอินของคุณและ removeArrows.js ของคุณอยู่ในรูทของปลั๊กอินของคุณคุณ$scrควรมีลักษณะเช่นนี้

plugins_url( '/removeArrows.js' , __FILE__ )

อีกประเด็นที่ควรทราบก็คือควรฝึกโหลดสคริปต์และสไตล์ของคุณให้ดีอยู่เสมอ สิ่งนี้จะช่วยให้มั่นใจได้ว่าสคริปต์และสไตล์อื่น ๆ จะไม่ถูกแทนที่ด้วย การทำเช่นนี้เพียงเพิ่มความสำคัญที่ต่ำมาก (จำนวนที่สูงมาก) พารามิเตอร์ความสำคัญของคุณ ( $priority) add_actionของ

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

และมักจะโหลดสคริปต์ / enqueue และรูปแบบผ่านwp_enqueue_scriptsเบ็ดการกระทำเช่นนี้เป็นตะขอที่เหมาะสมกับการใช้งาน อย่าโหลดสคริปต์และสไตล์โดยตรงไปที่wp_headหรือwp_footer

แก้ไข

สำหรับชุดรูปแบบตามที่คุณระบุว่าตอนนี้คุณย้ายทุกอย่างไปยังชุดรูปแบบของคุณคุณ$scrจะเปลี่ยนเป็นชุดรูปแบบนี้

 get_template_directory_uri() . '/removeArrows.js'

สำหรับธีมหลักและสิ่งนี้

get_stylesheet_directory_uri() . '/removeArrows.js'

สำหรับธีมลูก รหัสที่สมบูรณ์ของคุณควรมีลักษณะเช่นนี้

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

ขอบคุณมากสำหรับคำแนะนำที่ดีของคุณ ดูเหมือนว่าวิธีการใช้ แม้ว่าคำถามหนึ่ง Functions.php อยู่ในโฟลเดอร์ธีมของฉัน ฉันจะลิงก์ js-file ได้อย่างไรถ้ามันอยู่ในโฟลเดอร์ root ของธีมเดียวกัน
user2806026

คุณควรเก็บทุกอย่างไว้ในปลั๊กอินหรือในธีมอย่าแยกมัน หากคุณอยู่ในชุดรูปแบบของคุณ$scrจะเป็นget_template_directory_uri() . '/removeArrows.js'ชุดรูปแบบสำหรับผู้ปกครองและชุดรูปแบบget_templatestylesheet_directory_uri() . '/removeArrows.js'สำหรับเด็ก
Pieter Goosen

พยายามอีกครั้งคราวนี้เพิ่ม removeArrows.js โดยตรงในโฟลเดอร์ธีมและใช้สิ่งต่อไปนี้ใน functions.php; ฟังก์ชั่น wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', ไฟล์ ), อาร์เรย์ ('jquery'), '1.1', จริง); wp_enqueue_script ( 'my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); สิ่งนี้ทำให้ฉันมีข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์ที่ไม่คาดคิด ',' ในบรรทัด wp_register_script
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)ควรเป็นget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

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

4

ฉันจะไม่เพิ่มไฟล์ js ภายนอกอีกไฟล์เป็นเพียงทรัพยากรที่ไม่จำเป็นในการดึงข้อมูลและเป็นสิ่งที่เราต้องการลดเวลาในการโหลดหน้าเว็บ

ฉันจะเพิ่มข้อมูลโค้ด jQuery นี้ในเว็บไซต์ของคุณโดยใช้wp_headตะขอ คุณจะวางต่อไปนี้ในไฟล์ฟังก์ชั่นธีมหรือปลั๊กอินของคุณ ฉันยังทำให้แน่ใจว่า jQuery อยู่ในโหมดไม่มีข้อขัดแย้งตามที่คุณเห็นด้านล่าง

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

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


แต่นั่นไม่ใช่วิธี WordPress ในการโหลด Javascript ดูwp_enqueue_script()ข้อมูลเพิ่มเติม
Pat J

2
สวัสดี @PatJ ฉันเห็นด้วยสำหรับการโหลดไลบรารี JS ภายนอกหรือไฟล์ JS ด้วยฟังก์ชั่น Javascript ทั้งหมดของคุณในนั้นแล้วใช่แน่นอนว่าจะเป็นวิธีที่ถูกต้อง อย่างไรก็ตามหากคุณกำลังโหลดตัวอย่างของ Javascript มันไม่เหมาะสมที่จะสร้างไฟล์ JS ใหม่ทั้งหมดและเพิ่มคำขอ HTTP เพิ่มเติมสำหรับสิ่งนั้น ยกตัวอย่างเช่นใช้ Google Analytics ใน 99% ของชุดรูปแบบหรือสร้างที่กำหนดเอง JS จะถูกเพิ่มลงในส่วนหัวหรือส่วนท้ายผ่านตัวเลือกชุดรูปแบบหรือไฟล์ฟังก์ชั่น วิธีปฏิบัติทั่วไปในการรวม JS หรือแม้แต่ตัวอย่าง CSS ด้วยวิธีนี้
Matt Royal

1
"การปฏิบัติทั่วไป" ไม่ถูกต้องแม้ว่า wp_enqueue_script()เอกสารแม้รัฐนี้เป็นวิธีที่แนะนำของการเชื่อมโยง JavaScript เพื่อให้หน้าเวิร์ดเพรสสร้าง
Pat J

หากคุณใช้ธีมเริ่มต้นที่ยี่สิบสี่ของ WordPress ธีมโหลด html5.js ใน header.php ได้รับ doe ด้วยวิธีนี้ด้วยเหตุผลเพื่อตรวจสอบเบราว์เซอร์ที่ตรงกับเงื่อนไขของการเป็น IE <9 แต่ประเด็นของฉันคือการเข้าใจการจัดคิวเป็นวิธีที่แนะนำและแนะนำ แต่ขึ้นอยู่กับตัวแปร / สถานการณ์อื่น ๆ รอบตัวคุณ กำลังพยายามทำให้สำเร็จอาจไม่ได้ใช้งานจริงที่สุดและฉันคิดว่าควรใช้ดุลยพินิจ ดูฉันอาจจะผิดอย่างสมบูรณ์ในมุมมองนี้เช่นกันฉันสนใจที่จะได้ยินสิ่งที่คนที่มีประสบการณ์จริง ๆ ต้องพูดว่า :-)
Matt Royal

ขอบคุณสำหรับคำแนะนำที่ดีของคุณ ฉันไม่สามารถทำงานได้ หากฉันเพิ่มรหัสของคุณภายในแท็ก <? php ของ function.php ของฉันฉันจะได้รับ 'ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์ผิดพลาด' <'ใน /somepath.../functions.php ที่บรรทัด 1146' หากฉันเพิ่มไว้นอก <? php มันก็ดูเหมือนว่าจะสะท้อนรหัสที่กำหนดในด้านบนของหน้า ฉันหายไปนี่อะไร
user2806026

0

เนื่องจากคำตอบได้รับการยอมรับดังนั้นฉันแค่อยากจะบอกว่ามีอีกวิธีหนึ่งในการจัดคิวโค้ดจาวาสคริปต์ในส่วนท้ายซึ่งฉันทำมาหลายครั้งแล้ว

ในไฟล์ functions.php:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

คุณสามารถโหลดสคริปต์นี้ไปยังเทมเพลตหน้าเฉพาะโดยใช้เงื่อนไข

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

หาก page-template.php อยู่ในไดเรกทอรี (พูดว่า directory templates ใน dir รูทของธีม) คุณสามารถเขียนดังนี้:

is_page_template( 'templates/page-template.php' );

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

-1

เพื่อตอบคำถามเราต้องสร้างความแตกต่างระหว่าง javascript และ JQuery

ในการระบุด้วยวิธีง่าย ๆ :

  • Javascript มีพื้นฐานมาจาก ECMAScript
  • JQuery เป็นห้องสมุดสำหรับ Javascript

ดังนั้นในความเป็นจริงคุณถามคำถามสองข้อที่แตกต่างกัน:

  • ชื่อของคุณพูดถึงวิธีแก้ปัญหาสำหรับการใช้งานจาวาสคริปต์
  • คำถามของคุณพูดถึงวิธีแก้ปัญหาสำหรับการใช้ JQuery

เนื่องจากผลลัพธ์ของ Google แสดงชื่อของคุณและเนื้อหาทั้งหมดของหน้าพูดถึง JQuery สิ่งนี้อาจทำให้ผู้คนที่ค้นหาโซลูชัน javascript กลายเป็นคนหงุดหงิดมาก

และตอนนี้สำหรับโซลูชัน JQuery:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

และวิธีแก้ปัญหาจาวาสคริปต์:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

รหัสนี้สามารถเพิ่มเข้าไปในฟังก์ชั่นของคุณได้ตำแหน่งของสคริปต์ในทั้งสองกรณีคือ wp-content/themes/theme-name/js/script.js

การเข้ารหัสมีความสุข!


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