Làm thế nào để bao gồm chính xác các hiệu ứng jquery-ui trên wordpress


25

Tôi đã cố gắng đưa các hiệu ứng ui jquery (cụ thể hơn là hiệu ứng lắc) vào chủ đề wordpress của tôi. Cho đến nay, tôi chỉ có thể bao gồm tập lệnh jQuery, nhưng tôi thực sự không biết nơi đặt các tập lệnh ui và làm thế nào để thu hút chúng.

Đây là mã tôi có. Nó rõ ràng không hoạt động:

    <?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_head(); ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript">
    var $j = jQuery.noConflict();
    $j(document).ready(function() {
        $j("#manita-imagen").mouseover(function(){
            //$j(this).animate({ opacity: "hide" })
            // alert('asd');
            $j(this).effect("shake", { times:3 }, 300);
        });
    });

 </script>

Cảm ơn bạn đã giúp đỡ!


5
Một lưu ý: bạn không cần phải enquue jquery, bởi vì nó đã được liệt kê như là một phụ thuộc của jquery-ui-core.
Goldenapples

Câu trả lời:


36

Mặc dù WordPress bao gồm các thư viện UI của jQuery, nhưng nó không bao gồm thư viện UI / Effects. Thư viện đó là riêng biệt và độc lập. Bạn sẽ cần bao gồm một bản sao của tệp Effects.core.js và ghi lại nó một cách riêng biệt.

Lưu ý rằng bạn nên đặt tên cho nó là jquery-Effects-core khi en-queueing nó, để đặt tên nhất quán.

Bạn có thể bao gồm nó như thế này:

wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');

Chỉnh sửa : Câu trả lời này được viết trước WordPress 3.3, hiện bao gồm các thư viện hiệu ứng khác nhau như một phần cốt lõi. Bạn có thể chỉ cần liệt kê các phần của thư viện hiệu ứng mà bạn cần sử dụng ngay bây giờ.

Danh sách các con sên cho các tệp này có thể được tìm thấy trong wp-gồm / script-loader.php, nhưng sên của lõi là jquery-effect-core.

wp_enqueue_script("jquery-effects-core");

1
Xin lưu ý rằng để có hiệu ứng thực tế (mù, nảy, mờ, ..) bạn phải ghi rõ hiệu ứng đó. Thích cho 'fade':wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed

Người dùng nên đặt Javascript của riêng họ vào một tệp riêng biệt và sau đó liệt kê tệp đó và liệt kê các phụ thuộc mà nó cần. Bằng cách đó, WordPress (và các plugin hiệu suất) biết thứ tự cần thiết để tải các tập lệnh này và sẽ đặt chúng theo đúng thứ tự trên trang.
Dave Hilditch

8

@dabito,

Bạn đang không tải tập lệnh của mình ngay ... Đừng gọi wp_enqueue_script()bên trong tệp mẫu chủ đề của bạn (điều này trông giống như vậy header.php). Bạn cần gọi hàm này từ một hook riêng.

Trong functions.phptệp chủ đề của bạn , đặt mã sau đây:

function my_add_frontend_scripts() {
        wp_enqueue_script('jquery');
        wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');

Nếu cả hai tập lệnh được đăng ký đúng cách, điều này sẽ tải chúng tốt (bằng cách thêm các <script />thẻ thích hợp vào tiêu đề. Sau đó, mã JavaScript khác của bạn sẽ hoạt động.

Nếu bạn muốn thêm tập lệnh vào phía quản trị viên , hãy thêm hành động của bạn vào admin_enqueue_scriptsthay thế.


1
Không chính xác. Miễn là anh ấy gọi cho họ trước cuộc gọi wp_head (), điều đó sẽ hoạt động tốt. Họ không cần phải kết nối và dù sao họ cũng không nên kết nối với init. Nếu bạn định móc chúng ở đâu đó, hãy móc chúng vào móc hành động 'wp_enqueue_scripts'. Đó là những gì nó ở đó cho.
Otto

1
@Otto Những gì bạn nói nghe có vẻ hợp lý. Nhưng bạn có giải thích tại sao trong codex nó nói những gì @EAMann đã viết - "Sử dụng hành động init để gọi hàm này."? Và ví dụ của anh ta được lấy từ đó ... codex.wordpress.org/Function_Reference/wp_enqueue_script
Lea Cohen

Các codex là haphazard ở những nơi. Hành động tốt nhất để sử dụng cho việc này là 'wp_enqueue_scripts' cho giao diện người dùng hoặc 'admin_enqueue_scripts' ở mặt sau. Kết nối với init sẽ hoạt động, nhưng nó sẽ không cần phải thu hút tập lệnh trên toàn bộ trang web.
Otto

Tôi đã cập nhật đoạn mã của mình cho phù hợp. Ban đầu, đây là một phản ứng nhanh, dựa trên tham chiếu Codex ... sử dụng wp_enqueue_scriptschắc chắn là cách tốt hơn và tránh yêu cầu is_admin()kiểm tra thêm .
EAMann

Đây cũng là cách sai - các plugin hiệu suất cần phải biết các phụ thuộc. Tác giả nên viết tệp .js của riêng họ và ghi tên đó và đặt tên cho các phụ thuộc - WordPress sẽ xử lý phần còn lại.
Dave Hilditch

7

Bạn cũng có thể liệt kê toàn bộ UI jQuery trực tiếp từ Google. Đây là cách tôi làm điều đó:

wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');

Và vì jQuery được liệt kê như một phần phụ thuộc cho Giao diện người dùng jQuery, nên bạn không cần phải thủ công nó. WordPress sẽ làm điều đó tự động cho bạn.


3
Bạn thậm chí có thể tải tất cả các lib của jQuery từ Google CDN thay vì trang web của riêng bạn.
Jan Fabry

Tôi rất không khuyến khích tải tập lệnh từ các nguồn nước ngoài. Tôi đã làm điều đó khá lâu và (hiếm khi) xảy ra việc máy chủ bị sập, vì vậy nhiều khách hàng gặp vấn đề với các trang của họ cùng một lúc.
Julian F. Weinert

1
@ JulianF.Weinert là con dao hai lưỡi, với một cdn tốt có nghĩa là độ trễ thấp hơn nhưng thiếu kiểm soát nếu thất bại. Điều đó nói rằng, nếu Google cdn bị hỏng một nửa thì Internet sẽ thất bại nên bạn sẽ không phải là người duy nhất. Tuy nhiên, khả năng nó sẽ không hoạt động và không được lưu trong bộ nhớ cache trên trình duyệt người dùng là rất nhỏ. Đối với hầu hết các tình huống sử dụng một cdn là một lợi ích.
Alex

Thật. Tôi đã không nói về một CDN đầy đủ, tất nhiên, điều này sẽ hoàn toàn tốt ở đây, vì nó được thiết kế cho chính xác cách sử dụng đó. Tải tập lệnh từ bất kỳ john-doe.com mặc dù tôi có một chút rủi ro, tôi nghĩ
Julian F. Weinert

3

Dường như không có tải mặc định cho thư viện jQuery này (danh sách đầy đủ ở đây ) vì vậy bạn có thể sẽ phải đăng ký tập lệnh trước khi bạn xử lý nó.


1
Tôi nghĩ bạn có thể đúng (đôi khi tên WP đăng ký tập lệnh bên dưới khác với tên tiêu chuẩn được sử dụng) nhưng trong trường hợp này, đăng ký 'jquery-ui-core' sẽ hoạt động. Nó được liệt kê trong core.trac.wordpress.org/browser/branches/3.0/wp-includes/ đá
Goldenapples

Điểm tốt! Tôi cho rằng ông muốn tải chỉ rằng jQuery thư viện, trong trường hợp tải phần còn lại sẽ là một chút bloaty.
biên tập viên

3

Chỉ là một mẹo nhỏ. Khi bạn enqueue script của bạn, nó enqueue cho toàn bộ trang web bao gồm cả bảng quản trị. Nếu bạn không muốn tập lệnh trong bảng quản trị, bạn chỉ có thể đưa chúng vào trang web ở lối vào.

function my_add_frontend_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui-core');
}

add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

4
Bạn không nên sử dụng hook init để thực hiện enqueueing. Sử dụng hook wp_enqueue_scripts chỉ cho giao diện người dùng hoặc hook admin_enqueue_scripts cho mặt sau.
Otto

Không biết rằng wp_enqueue_scriptshành động chỉ dành cho giao diện người dùng. Cảm ơn :)
Tareq

0

Tất cả các câu trả lời ở đây, trong khi chúng hoạt động, đều sai về mặt kỹ thuật.

Cách chính xác để bao gồm jquery-ui và các thư viện khác là đưa chúng vào như phần phụ thuộc của tập lệnh của riêng bạn.

Điều này rất quan trọng, bởi vì các công cụ hiệu suất có thể kiểm tra các phụ thuộc này để thay đổi thứ tự tải tập lệnh của bạn để tối ưu hóa trang web.

Vì vậy, nếu bạn muốn sử dụng jquery và jquery-ui, hãy tạo tệp tập lệnh .js của riêng bạn và liệt kê nó như thế này, với các phụ thuộc được liệt kê - không cần một lệnh enqueue riêng cho mỗi thư viện bạn đang sử dụng:

wp_enqueue_script('your-script-handle', 
 plugins_url('your-script-file.js', __FILE__), 
 array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);

Bạn có thể tìm thấy danh sách tất cả các tập lệnh có sẵn để thêm dưới dạng phụ thuộc tại đây: https://developer.wordpress.org/reference/fifts/wp_enqueue_script/


1
Bạn có nó đúng. Sử dụng các phụ thuộc trong các cuộc gọi wp_enqueue_script của riêng bạn là cách chính xác để bao gồm jquery / jquery-ui / etc. Không cần phải liệt kê chúng một cách riêng biệt.
Michae Pavlos Michael

Và nếu bạn xử lý chúng một cách riêng biệt khi tập lệnh của bạn phụ thuộc vào chúng, tập lệnh của bạn có thể / sẽ phá vỡ các trang web tối ưu hóa hiệu suất - ví dụ: nếu tập lệnh được kết hợp thành một tập lệnh để tăng tốc độ tải hoặc nếu chúng bị hoãn hoặc giảm thiểu (phụ thuộc vào minifcation thứ tự có thể thay đổi). Nếu bạn chưa nói với WordPress rằng tập lệnh của bạn phụ thuộc vào các tập lệnh khác, bạn không thể đảm bảo thứ tự mà chúng sẽ tải.
Dave Hilditch
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.