Cách thêm Javascript chính xác vào hàm.php


10

Tôi muốn xóa một số mũi tên trông xấu xí là tiêu chuẩn trên các nút giỏ hàng trong WooC Commerce. Để đạt được điều này, tôi đã tìm thấy một mẹo thêm đoạn mã sau, cần loại bỏ các mũi tên khi tài liệu đã được tải.

Tôi giả sử tôi sẽ đặt nó trong hàm.php của tôi? Làm thế nào chính xác tôi sẽ làm điều đó?

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

BIÊN TẬP

Được chứ. Tôi đã thử phương pháp này:

Tạo một tệp có tên 'removeArrows.js' và đặt nó vào thư mục plugin của tôi. Điều này có cùng nội dung với mã gốc, ngoại trừ jQuery thay vì $. Sau đó, tôi đã thêm vào sau vào hàm.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' ); 

Tôi không thể tìm ra cách làm cho mã hiển thị đúng. Điều này đã không làm việc. Bất kỳ đề xuất để làm cho công việc này?

Nguồn trích dẫn jQuery


Điều đó thật điên rồ: bạn không thể chỉnh sửa các mũi tên trong mã tạo ra chúng sao? (Hoặc nó được tải xuống từ một nguồn bên ngoài?) Trong mọi trường hợp, bạn có thể thực hiện cả hai thay thế trong một chức năng duy nhất để tránh đọc và ghi tất cả HTML bên trong khối giỏ hàng hai lần. Tôi không biết cách tiêm trực tiếp vào trang từ hàm.php nhưng bạn có thể lưu nó trong một tệp script riêng biệt (nếu bạn chưa có tài khoản, bạn có thể thêm nó vào) và sau wp-enqueue-scriptđó. Bạn cũng sẽ phải đổi $s thành jQuery(xem trang đó phần 7)
Rup

Không, tôi khá chắc chắn rằng nó không thể được gỡ bỏ trước khi chèn. Nếu có thể, tôi đã không thể tìm ra cách để làm điều đó. Điểm tốt về việc thêm nó trong một chức năng duy nhất. Nó sẽ trông như thế này? $ (tài liệu). yet (function () {$ (". wooc Commerce-cart"). html (function (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Tôi sẽ xem xét kịch bản enqueue. Có vẻ hơi phức tạp, mặc dù .. Cảm ơn!
user2806026

Được chứ. Tôi đã thử cách tiếp cận này; Tạo một tệp có tên 'removeArrows.js' và đặt nó vào thư mục plugin của tôi. Điều này có cùng nội dung với mã gốc, ngoại trừ jQuery thay vì $. sau đó tôi đã thêm vào sau vào hàm.php; `function wpb_adding_scripts () {wp_register_script ('my_amazed_script', plugins_url ('removeArrows.js', FILE ), mảng ('jquery'), '1.1', true); wp_enqueue_script ('my_amazed_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Xin lỗi, tôi không thể tìm ra cách làm cho mã hiển thị đúng) Điều này không hoạt động. Bạn có thể giúp tôi sửa chữa nó?
user2806026

1
Vui lòng gửi một chỉnh sửa và thêm tất cả thông tin có liên quan trực tiếp vào câu hỏi của bạn Không sử dụng phần bình luận để thêm mã
Pieter Goosen

Câu trả lời:


10

Của bạn $scrtrong của bạn wp_register_script()chức năng là sai. Vì hàm.php của bạn nằm trong plugin của bạn và removeArrows.js nằm trong thư mục gốc của plugin, bạn $scrsẽ trông như thế này

plugins_url( '/removeArrows.js' , __FILE__ )

Một điểm lưu ý khác, luôn luôn là tốt để tải tập lệnh và kiểu cuối cùng của bạn. Điều này sẽ đảm bảo rằng nó sẽ không bị ghi đè bởi các tập lệnh và kiểu khác. Để làm điều này, chỉ cần thêm mức độ ưu tiên rất thấp (số rất cao) vào tham số ưu tiên ( $priority) của bạn add_action.

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

luôn luôn tải / enqueue script và style thông qua wp_enqueue_scriptshook hành động, vì đây là hook thích hợp để sử dụng. Không tải tập lệnh và kiểu trực tiếp đến wp_headhoặcwp_footer

BIÊN TẬP

Đối với các chủ đề, như bạn đã chỉ ra rằng bây giờ bạn đã chuyển mọi thứ sang chủ đề của mình, bạn $scrsẽ thay đổi thành chủ đề này

 get_template_directory_uri() . '/removeArrows.js'

cho chủ đề phụ huynh và điều này

get_stylesheet_directory_uri() . '/removeArrows.js'

cho các chủ đề trẻ em. Mã hoàn chỉnh của bạn sẽ trông như thế này

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 ); 

Cảm ơn rất nhiều cho lời khuyên tuyệt vời của bạn. Điều này có vẻ như cách tiếp cận để sử dụng. Một câu hỏi mặc dù; các hàm.php nằm trong thư mục chủ đề của tôi. Làm cách nào để liên kết tệp js nếu nó nằm trong cùng thư mục gốc của chủ đề?
user2806026

Bạn nên giữ mọi thứ trong một plugin hoặc trong một chủ đề, đừng phân chia chúng. Nếu bạn đang ở trong một chủ đề, thì bạn $scrsẽ get_template_directory_uri() . '/removeArrows.js'dành cho các chủ đề dành cho phụ huynh và get_templatestylesheet_directory_uri() . '/removeArrows.js'dành cho trẻ em
Pieter Goosen

Đã thử lại, lần này thêm trực tiếp removeArrows.js vào thư mục chủ đề và sử dụng các mục sau trong Hàm.php; hàm wpb_adding_scripts () {wp_register_script ('my_amazed_script', get_template_directory_uri (). '/removeArrows.js', FILE ), mảng ('jquery'), '1.1', true); wp_enqueue_script ('my_amazed_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); điều này mang lại cho tôi lỗi Parse: lỗi cú pháp, không mong muốn ',' trên dòng wp_register_script.
dùng2806026

get_template_directory_uri() . '/removeArrows.js', FILE)chỉ nên làget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

Không. Sử dụng mã hoàn toàn của bạn, bạn đã chỉnh sửa vào dưới cùng của bài viết gốc của bạn. Điều duy nhất nó làm là đóng băng trang giỏ hàng khi xem nội dung. Tôi nghĩ rằng tôi sẽ từ bỏ :-) Một biện pháp cuối cùng mặc dù; bạn đã bắt đầu bằng cách đề cập rằng get_template_directory_uri () dành cho các chủ đề gốc, và sau đó trong mã hoàn chỉnh cuối cùng dành cho các chủ đề con. Đó là cái gì Chủ đề của tôi là phụ huynh :-)
user2806026

4

Tôi sẽ không thêm một tệp js bên ngoài khác, đây chỉ là một tài nguyên bổ sung và không cần thiết để tìm nạp và đó là thứ chúng tôi muốn cắt giảm về thời gian tải trang.

Tôi sẽ thêm đoạn mã jQuery này vào đầu trang web của bạn bằng cách sử dụng wp_headhook. Bạn sẽ dán đoạn sau vào tập tin chức năng chủ đề hoặc plugin. Tôi cũng đã chắc chắn rằng jQuery ở chế độ không xung đột như bạn có thể thấy bên dưới.

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

Khi bạn đã hoàn thành việc này và làm mới trang của mình, hãy kiểm tra nguồn trang để đảm bảo đoạn mã jQuery này thực tế được tải vào trang của bạn. Nếu đúng thì nó sẽ hoạt động trừ khi chúng là thứ gì đó trong đoạn mã jQuery thực tế mà bạn đang sử dụng.


Tuy nhiên, đó không phải là cách WordPress để tải Javascript. Xem wp_enqueue_script()để biết thêm thông tin.
Pat J

2
Xin chào @PatJ, tôi đồng ý, vì đã tải một thư viện JS hoặc tệp JS bên ngoài có tất cả các hàm Javascript của bạn trong đó, thì chắc chắn đó sẽ là cách chính xác. Tuy nhiên, nếu bạn đang tải một đoạn mã Javascript, sẽ không có ý nghĩa gì khi tạo một tệp JS hoàn toàn mới và thêm một yêu cầu HTTP bổ sung chỉ cho việc đó. Lấy Google Analytics làm ví dụ, trong 99% chủ đề hoặc bản dựng tùy chỉnh, JS sẽ được thêm vào tiêu đề hoặc chân trang thông qua tùy chọn chủ đề hoặc tệp chức năng. Cách thực hành phổ biến của nó là bao gồm các đoạn mã JS hoặc thậm chí CSS theo cách này.
Matt Royal

1
"Thực tế thông thường" không làm cho nó đúng, mặc dù. Các wp_enqueue_script()tài liệu thậm chí còn nêu rõ Đây là phương pháp được đề xuất để liên kết JavaScript với trang được tạo bởi WordPress .
Pat J

Nếu bạn lấy chủ đề hai mươi mặc định của WordPress, nó sẽ tải html5.js trong tiêu đề.php. Cấp cho doe theo cách này vì một lý do để kiểm tra trình duyệt đáp ứng điều kiện là IE <9, nhưng quan điểm của tôi là dễ hiểu, mê hoặc là phương pháp được đề xuất và ưa thích nhưng phụ thuộc vào tất cả các biến / hoàn cảnh khác xung quanh bạn đang cố gắng để đạt được nó có thể không phải lúc nào cũng thực tế nhất và tôi nghĩ nên sử dụng một số quyết định. Hãy nhìn xem, tôi cũng có thể sai hoàn toàn trong quan điểm này, tôi rất muốn nghe những gì một số người thực sự có kinh nghiệm nói :-)
Matt Royal

Cảm ơn lời đề nghị tuyệt vời của bạn. Tôi không thể làm cho nó hoạt động mặc dù; nếu tôi thêm mã của bạn vào bên trong thẻ <? php của hàm.php. Tôi nhận được 'Lỗi phân tích cú pháp: lỗi cú pháp, không mong muốn' <'trong /somepath.../fiances.php trên dòng 1146'. Nếu tôi thêm nó bên ngoài <? Php, nó dường như chỉ lặp lại mã đã cho ở đầu trang. Tôi đang thiếu gì ở đây?
dùng2806026

0

Vì câu trả lời đã được chấp nhận rồi nên tôi chỉ muốn nói có một cách khác để ghi lại mã javascript ở chân trang mà tôi đã thực hiện nhiều lần.

trong tệp tin.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' );

bạn chỉ có thể tải tập lệnh này vào mẫu trang cụ thể bằng cách sử dụng điều kiện

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;

nếu page-template.php nằm trong thư mục (giả sử thư mục mẫu trong thư mục gốc của chủ đề), bạn có thể viết như sau:

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

Tôi sẽ không đề xuất "nướng" JavaScript vào phần chân trang như thế này. Nó ngăn không cho nó không thể chỉnh sửa hoặc sửa đổi (ít nhất, dễ dàng), điều cực kỳ quan trọng trong phát triển plugin và chủ đề. Nếu bạn là người dùng cuối của một trang web và cần một kịch bản nhanh hoặc một cái gì đó, hãy tìm nó - nhưng thậm chí nó vẫn wp_enqueue_script()luôn luôn tốt hơn và linh hoạt hơn.
Xhynk

-1

Để trả lời câu hỏi, trước tiên chúng ta phải phân biệt giữa javascript và JQuery.

Nói một cách đơn giản:

  • Javascript dựa trên ECMAScript
  • JQuery là một thư viện cho Javascript

Vì vậy, trong thực tế, bạn hỏi hai câu hỏi khác nhau:

  • Tiêu đề của bạn nói về một giải pháp để thực hiện javascript
  • Câu hỏi của bạn nói về một giải pháp để triển khai JQuery

Vì kết quả của Google hiển thị tiêu đề của bạn và tất cả nội dung của trang nói về JQuery, điều này có thể trở nên rất khó chịu đối với những người tìm kiếm giải pháp javascript.

Và bây giờ cho giải pháp JQuery:

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

Và giải pháp javascript:

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

Mã này có thể được thêm vào hàm của bạn.php Vị trí của các tập lệnh trong cả hai trường hợp là wp-content/themes/theme-name/js/script.js

Chúc mừng mã hóa!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.