O cậu bé, tiêu đề âm thanh đáng sợ không nó. Bạn không phải lo lắng vì chúng tôi sẽ phá vỡ nó xuống. Chủ đề của bạn đang chạy các câu hỏi WordPress tuỳ chỉnh để hiển thị các bài đăng ngẫu nhiên, bài đăng phổ biến, các bài đăng gần đây trong thanh bên hoặc bất cứ nơi nào khác? Nếu có, bạn nên xem xét sử dụng API tạm thời của WordPress để lưu trữ các truy vấn này để giảm tiêu thụ tài nguyên cũng như giúp thời gian tải. Trong bài này, chúng tôi sẽ chỉ cho bạn cách tăng tốc độ trang WordPress của bạn bằng cách lưu trữ các truy vấn tùy chỉnh bằng cách sử dụng API Transients.
Lưu ý: Bạn cần phải hiểu các chủ đề WordPress làm việc như thế nào (loops vv), để bạn có thể làm theo bài đăng này.
Vì vậy, toàn bộ bộ nhớ đệm và lingo thoáng qua này là đi qua đầu của tôi. Vâng không lo lắng cho chúng tôi giải thích những gì nó làm. 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 cho thấy 6 bài viết ngẫu nhiên trong thanh bên của bạn, sau đó tạm thời API có thể giúp đỡ. Mỗi lần người dùng làm mới trang, truy vấn WP Query mà bạn có sẽ đi vào cơ sở dữ liệu của bạn và kéo 6 bài viết một cách ngẫu nhiên. Nếu bạn là một trang web tương đối mới, nó không phải là xấu. Nhưng nếu bạn nhận được rất nhiều người đến trang của bạn, thì nó có thể sụp đổ máy chủ SQL của bạn, và bạn sẽ thấy màn hình “Error Establishing Database Connection”. Bằng cách thêm một vài dòng mã thêm, bạn có thể lưu trữ các kết quả của truy vấn đó một cách dễ dàng (cache it) trong một khoảng thời gian nhất định bằng cách sử dụng API Transients.
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:
have_posts (): $ random_query-> the_post (); ?>
Phần thú vị nhất về truy vấn ngẫu nhiên của chúng tôi trong thanh bên là nó cho thấy nội dung mới mỗi lần. Vì vậy, bằng cách lưu trữ các truy vấn trong 12 giờ, chúng tôi sẽ có 6 bài viết tương tự cho thấy trong 12 giờ phải không? Vâng, chúng tôi tìm thấy một tác phẩm xung quanh nhờ vào lời đề nghị của bạn của chúng tôi Konstantin Kovshenin (@kovshenin). Ông đề nghị 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ế. Cache các kết quả của truy vấn đó bằng cách sử dụng API tạm thời và sau đó sử dụng hàm array_rand () để chỉ hiển thị 6 bài viết trong số 20 ngẫu nhiên. 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 mã từ trang WordPress Codex.
// Lấy bất kỳ bản sao hiện tại nào của dữ liệu tạm thời của chúng tôi if (false === ($ special_query_results = get_transient ('special_query_results')))) { // Không có ở đó, vì vậy hãy tạo lại dữ liệu và lưu lại thoáng qua $ 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à vùng mà bạn có thể kiểm soát độ dài của bộ nhớ cache. Bạn có thể thay đổi nó bất cứ điều gì bạn thích. Bây giờ nếu chúng tôi hiển thị $ special_query_results sử dụng vòng lặp foreach, chúng tôi sẽ hiển thị tất cả 20 bài đăng. Vì vậy, chúng ta cần phải 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ư sau:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Bây giờ điều này sẽ kéo ra 6 ID đăng bài ngẫu nhiên từ dữ liệu thoáng qua 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 làm thêm đoạn 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]]; $ sáupô [5] = $ randomposts [$ randkey [5]];
Về cơ bản, chúng tôi đã tạo một mảng cho $ sáu cây cột, trong đó chúng tôi chỉ định giá trị cho mỗi mục đó. Không chắc chắn nếu đây là cách tốt nhất để đi về nó, nhưng nó đã làm việc. Nếu bạn có bất kỳ gợi ý tốt hơn, sau đó cảm thấy tự do để đăng nó trong các ý kiế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ư thế này:
bài đăng toàn cầu $; / / cần thiết cho nó để làm việc foreach ($ sixposts với $ post): setup_postdata ($ post); // Tất cả các đồ vật đi đây. cuối cùng;
setup_postdata cho phép bạn sử dụng tất cả các vòng lặp thẻ bên trong vòng lặp foreach như the_permalink vv
Để làm cho nó dễ dàng cho tất cả mọi người, đây là mã cuối cùng mà chúng tôi có:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); } // Sử dụng dữ liệu như bạn thường ... $ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6); $ 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]]; $ sáupô [5] = $ randomposts [$ randkey [5]]; bài đăng toàn cầu $; foreach ($ sixposts với $ post): setup_postdata ($ post); ?>
Ta da, bây giờ bạn chỉ thực hiện truy vấn DB này một lần mỗi 12 giờ bất kể có bao nhiêu người dùng ghé thăm trang web của bạn.