Hỡi chàng trai, tiêu đề nghe có vẻ đáng sợ phải không. Bạn không có gì phải lo lắng vì chúng tôi sẽ chia nhỏ tất cả. Chủ đề của bạn có đang chạy các truy vấn WordPress tùy chỉnh để hiển thị các bài đăng ngẫu nhiên , bài đăng phổ biến , bài đăng gần đây , v.v. trong thanh bên hay bất kỳ nơi nào khác không? Nếu có, thì bạn nên xem xét sử dụng API tạm thời của WordPress để lưu vào bộ đệm các truy vấn này nhằm giảm tiêu thụ tài nguyên cũng như giúp thời gian tải. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách tăng tốc trang web WordPress của bạn bằng cách lưu vào bộ nhớ đệm các truy vấn tùy chỉnh bằng API Chuyển tiếp.
Lưu ý: Bạn cần hiểu cách các chủ đề WordPress hoạt động (các vòng lặp, v.v.), để có thể theo dõi bài đăng này.
Vì vậy, toàn bộ bộ nhớ đệm và biệt ngữ thoáng qua này đang lướt qua đầu tôi. Đừng lo lắng, hãy để chúng tôi giải thích nó làm gì. Về cơ bản, nếu bạn đang chạy một trang web như List25 và có một vòng lặp hiển thị 6 bài đăng ngẫu nhiên trong thanh bên của bạn, thì API tạm thời có thể giúp ích. Mỗi khi người dùng làm mới trang, Truy vấn WP tùy chỉnh mà bạn có sẽ đi vào cơ sở dữ liệu của bạn và kéo 6 bài đăng ngẫu nhiên. Nếu bạn là một trang web tương đối mới, nó sẽ không tệ như vậy. Nhưng nếu bạn đang có RẤT NHIỀU người vào trang web của mình, thì nó có thể làm hỏng máy chủ SQL của bạn và bạn sẽ thấy màn hình “Lỗi khi thiết lập kết nối cơ sở dữ liệu”. Bằng cách thêm một vài dòng mã bổ sung, bạn có thể dễ dàng lưu trữ kết quả của truy vấn đó (lưu vào bộ nhớ cache) trong một khoảng thời gian nhất định bằng cách sử dụng API Chuyển tiếp.
Ví dụ về mã vòng lặp mà chúng tôi có để kéo các bài đăng ngẫu nhiên:
Phần thú vị nhất về truy vấn bài đăng ngẫu nhiên của chúng tôi trong thanh bên là nó luôn hiển thị nội dung mới. Vì vậy, bằng cách lưu vào bộ nhớ đệm truy vấn trong 12 giờ, chúng ta sẽ có 6 bài đăng giống nhau hiển thị trong 12 giờ đúng không? Chà, chúng tôi đã tìm được một tác phẩm nhờ sự gợi ý của người bạn Konstantin Kovshenin (@kovshenin). Anh ấy đề xuất rằng thay vì sử dụng WP_Query, chúng tôi sử dụng get_posts và kéo 20 bài đăng thay thế. Lưu vào bộ nhớ cache kết quả của truy vấn đó bằng cách sử dụng API chuyển tiếp, sau đó sử dụng hàm array_rand () để chỉ hiển thị ngẫu nhiên 6 bài đăng trong số 20 bài đăng ban đầu. Bằng cách này, chúng tôi có thể tiếp tục mô phỏng hiệu ứng ngẫu nhiên trên trang web.
Điều đầu tiên chúng tôi làm là thiết lập tạm thời. Chúng tôi nhận được mã từ trang WordPress Codex .
// Get any existing copy of our transient data if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) { // It wasn't there, so regenerate the data and save the transient $randargs = array('orderby' => 'rand', 'numberposts' => 20); $special_query_results = get_posts($randargs); set_transient( 'special_query_results', $special_query_results, 60*60*12 ); }
Lưu ý 60 * 60 * 12 là khu vực mà bạn có thể kiểm soát độ dài của bộ nhớ cache. Hãy thay đổi nó thành bất cứ điều gì bạn thích. Bây giờ nếu chúng ta hiển thị $ special_query_results bằng vòng lặp foreach, chúng ta sẽ có tất cả 20 bài đăng được hiển thị. Vì vậy, chúng ta cần sử dụng hàm array_rand () để chỉ kéo 6 mục một cách ngẫu nhiên. Chúng tôi đã thêm mã như thế này:
$randomposts = get_transient( 'special_query_results' ); $randkey = array_rand( $randomposts, 6 );
Bây giờ, điều này sẽ lấy ra 6 ID bài đăng một cách ngẫu nhiên từ dữ liệu tạm thời của chúng tôi. Tuy nhiên, nó sẽ không kéo các giá trị cho mỗi bài đăng. Vì vậy, chúng tôi phải thêm các bit mã này:
$sixposts[0] = $randomposts[$randkey[0]]; $sixposts[1] = $randomposts[$randkey[1]]; $sixposts[2] = $randomposts[$randkey[2]]; $sixposts[3] = $randomposts[$randkey[3]]; $sixposts[4] = $randomposts[$randkey[4]]; $sixposts[5] = $randomposts[$randkey[5]];
Về cơ bản, chúng tôi đã tạo một mảng cho $ sixposts trong đó chúng tôi gán một giá trị cho mỗi mục đó. Không chắc liệu đây có phải là cách tốt nhất để thực hiện nó hay không, nhưng nó đã hiệu quả. Nếu bất kỳ bạn nào có gợi ý tốt hơn, hãy đăng nó trong phần bình luận.
Sau khi làm điều đó, chúng tôi đã sẵn sàng để hiển thị vòng lặp. Đơn giản chỉ cần đặt mã như sau:
global $post; //required for it to work foreach( $sixposts as $post ) : setup_postdata($post); //All the items go here. endforeach;
setup_postdata cho phép bạn sử dụng tất cả các thẻ vòng lặp bên trong vòng lặp foreach này như the_permalink, v.v.
Để giúp mọi người dễ dàng, đây là mã cuối cùng mà chúng tôi có: