Diều Hâu
Kho theme & plugin bản quyền cho WordPress
  • WordPress
    • Plugin
    • Theme
    • Hướng Dẫn
    • Thủ Thuật
  • Công Nghệ
    • Điện thoại
    • Internet
    • Máy tính
  • Marketing
  • MMO
  • SEO
No Result
View All Result
  • WordPress
    • Plugin
    • Theme
    • Hướng Dẫn
    • Thủ Thuật
  • Công Nghệ
    • Điện thoại
    • Internet
    • Máy tính
  • Marketing
  • MMO
  • SEO
No Result
View All Result
Diều Hâu
No Result
View All Result
Home Thiết kế / Lập trình WordPress Thủ Thuật

Tăng Tốc WordPress Bằng Cách Lưu Trữ Truy Vấn Với Transients API

22/09/2020
in Thủ Thuật
0

Xin chào! Tiêu đề bài viết nghe có vẻ rắc rối đúng không? Nhưng đừng lo, bởi chúng tôi sẽ giúp bạn hiểu rõ vấn đề này. Có phải giao diện WordPress của bạn đang chạy những truy vấn tùy chỉnh để hiển thị bài viết ngẫu nhiên, bài viết phổ biến hay bài viết mới đây, v.v trên thanh bên cạnh hoặc ở bất kì chỗ nào khác? Nếu câu trả lời là có, bạn nên xem xét việc sử dụng lưu trữ truy vấn với Transients API này để giảm tiêu thụ tài nguyên cũng như cải thiện thời gian tải trang. Trong bài viết này, chúng tôi sẽ hướng dẫn 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 với Transients API.

Về cơ bản thì khi bạn chạy một trang web, ví dụ như dieuhau.com và có một vòng lặp hiển thị 6 bài viết ngẫu nhiên trên sidebar thì transient API có thể sẽ giúp ích cho bạn đấy. Mỗi khi một người dùng làm mới trang, truy vấn WP tùy chỉnh yêu cầu bạn phải đi đến cơ sở dữ liệu vào kéo vào 6 bài viết ngẫu nhiên. Nếu trang web của bạn khá là mới, mọi chuyện sẽ không quá tồi tệ. Nhưng nếu bạn sở hữu một trang web có nhiều người truy cập, nó có thể phá vỡ máy chủ SQL của bạn và bạn sẽ thấy màn hình báo “Lỗi kết nối cơ sở dữ liệu”. Bằng cách thêm một vài dòng mã dưới đây, bạn có thể dễ dàng lưu trữ kết quả của truy vấn về khoảng thời gian sử dụng Transients API.

Ví dụ về một mã vòng lặp mà chúng ta có để kéo các bài viết ngẫu nhiên lên :

<?php $random_query = new WP_Query('orderby=rand&posts_per_page=6'); while ($random_query->have_posts()) : $random_query->the_post();
?>



<div class="gridcontainer">



<div class="gridthumb"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>






<div class="gridcontent">



<div class="gridtext"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></div>



</div>



</div>



<?php endwhile; ?>

Phần hay nhất về truy vấn bài viết ngẫu nhiên trên thanh bên đó là nó hiển thị nội dung mới mỗi lần. Tức là bằng việc lưu trữ truy vấn trong 12 tiếng, chúng ta sẽ có 6 bài viết giống nhau hiển thị trong 12 giờ đúng không?

Thực ra thì chúng tôi đã tìm được một cách giải quyết khác nhờ gợi ý của một người bạn. Anh ấy cũng từng gợi ý thay vì sử dụng WP_Query, chúng ta hãy sử dụng get_posts và kéo 20 bài đăng lên thay thế. Lưu trữ kết quả mà khi truy vấn sử dụng Transients API, và sau đó sử dụng tính năng array_rand() để chỉ cho hiển thị ngẫu nhiên 6 trong số 20 bài viết. Bằng cách này, chúng ta có thể giữ được hiệu ứng ngẫu nhiên trên trang web.

Điều đầu tiên chúng ta cần làm đó là thiết lập Transients API (trình chuyển tiếp). Đây là đoạn code trên 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 );
}

Chú ý rằng 60*60*12 là chỗ mà bạn quản lý độ dài bộ nhớ đệm, nên bạn có thể thoải mái thay đổi con số theo ý muốn.

Giờ nếu chúng ta thực hiện hiển thị $special_query_results với vòng lặp foreach, chúng ta sẽ có tất cả 20 bài viết được hiển thị.

Vi thế, chúng ta cần sử dụng tính năng array_rand() để chỉ đưa 6 mục ngẫu nhiên lên mỗi lần. Hãy thêm mã như sau :

$randomposts = get_transient( 'special_query_results' );
$randkey = array_rand( $randomposts, 6 );

Giờ thì nó sẽ hiển thị ngẫu nhiên ID của 6 bài viết từ dữ liệu tạm thời của chúng ta. Tuy nhiên, nó sẽ không hiển thị nội dung mỗi bài viết, vì vậy, chúng ta vẫn cần phải thêm mã này nữa:

$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]];

Như vậy là về cơ bản, chúng ta đã tạo ra một dãy dành cho $sixposts mà chúng ta đã gán một chuỗi giá trị cho mỗi mục. Thực ra cũng không thể chắc chắn đây là cách tốt nhất để thực hiện việc này, nhưng dù sao nó cũng hoạt động. Nếu bạn có cách này tốt hơn, đừng ngần ngại cho chúng tôi biết ở phần bình luận nhé.
Sau khi xong thao tác đó, chúng ta đã sẵn sàng để hiển thị vòng lặp, chỉ cần đặt mã này vào:

global $post; //required for it to work
foreach( $sixposts as $post ) :  setup_postdata($post);
 
//All the items go here.
 
endforeach;  

Setup_postdata sẽ 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 , ví dụ như the_permalink,v.v..

Để ai cũng có thể thực hiện được thao tác này, thì đây là mã cuối cùng mà chúng tôi tìm được cho các bạn:

<?php // 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 );
}
 
// Use the data like you would have normally...
$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]];
$sixposts[5] = $randomposts[$randkey[5]];
 
global $post;
foreach( $sixposts as $post ) :  setup_postdata($post); ?>
 

<div class="gridcontainer">

<div class="gridthumb"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>


<div class="gridcontent">

<div class="gridtext"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></div>

</div>

</div>

 
<?php endforeach; ?>

Tada! Giờ thì bạn đã thực hiện được truy vấn cơ sở dữ liệu mỗi 12 giờ bất kể có bao nhiêu người dùng ghé thăm trang web của mình rồi đấy!

Tags: Transients API

Related Posts

No Content Available
Next Post
nhiều bình luận hơn

11 Cách Để Nhận Nhiều Bình Luận Hơn cho Blog Của Bạn

Đăng ký
Thông báo về
guest
guest
0 Bình Luận
Inline Feedbacks
View all comments

Bạn Cần Hỗ Trợ Về

Viết Blog

Bảo Mật

Sửa Lỗi

Tăng Tốc

SEO

Bán Hàng

Xem Nhiều Nhất

ten-mien-va-hosting-mien-phi

5 Website cung cấp tên miền Miễn Phí + Free Hosting (Updated 2020)

22/09/2020
Huong-dan-su-dung-WordPress

Hướng dẫn sử dụng WordPress cho người mới (Chi tiết từ A->Z)

26/09/2020
Loi-thuong-gap-trong-wordpress

25 lỗi thường gặp nhất trong WordPress và cách sửa chúng

21/09/2020
Hướng dẫn sửa lỗi Troubleshooting

Hướng dẫn khắc phục lỗi WordPress cho người mới bắt đầu

22/09/2020
cài đặt facebook messenger vào website

Hướng dẫn tích hợp Facebook chat vào website (không cần plugin)

26/09/2020
VPS khuyên dùng
  • Liên hệ
  • Sitemap
  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2021 Diều Hâu - Tạp chí công nghệ cho mọi người

No Result
View All Result
  • WordPress
    • Plugin
    • Theme
    • Hướng Dẫn
    • Thủ Thuật
  • Công Nghệ
    • Điện thoại
    • Internet
    • Máy tính
  • Marketing
  • MMO
  • SEO

© 2021 Diều Hâu - Tạp chí công nghệ cho mọi người

wpDiscuz
Comment Author Info
:wpds_smile::wpds_grin::wpds_wink::wpds_mrgreen::wpds_neutral::wpds_twisted::wpds_arrow::wpds_shock::wpds_unamused::wpds_cool::wpds_evil::wpds_oops::wpds_razz::wpds_roll::wpds_cry::wpds_eek::wpds_lol::wpds_mad::wpds_sad::wpds_exclamation::wpds_question::wpds_idea::wpds_hmm::wpds_beg::wpds_whew::wpds_chuckle::wpds_silly::wpds_envy::wpds_shutmouth: