Transients (ok)

https://developer.wordpress.org/apis/handbook/transients/

Overview

Trang này chứa tài liệu kỹ thuật của WordPress Transient API, cung cấp một cách đơn giản và chuẩn hóa để lưu trữ dữ liệu được lưu trong bộ nhớ cache tạm thời trong cơ sở dữ liệu bằng cách đặt tên tùy chỉnh và khung thời gian mà sau đó nó sẽ hết hạn và bị xóa.

API chuyển tiếp rất giống với API tùy chọn nhưng được bổ sung thêm tính năng thời gian hết hạn, giúp đơn giản hóa quá trình sử dụng bảng cơ sở dữ liệu wp_options để lưu trữ tạm thời thông tin đã lưu trong bộ nhớ cache.

Lưu ý rằng các hàm “site_” về cơ bản giống với các hàm đối tác của chúng, nhưng hoạt động trên toàn mạng khi sử dụng WordPress Multisite.

Cũng cần lưu ý rằng Chuyển đổi vốn được tăng tốc bằng các plugin bộ nhớ đệm, trong khi Tùy chọn thông thường thì không. Ví dụ, một plugin memcached sẽ làm cho WordPress lưu trữ các giá trị tạm thời trong bộ nhớ nhanh thay vì trong cơ sở dữ liệu. Vì lý do này, quá trình chuyển đổi nên được sử dụng để lưu trữ bất kỳ dữ liệu nào dự kiến sẽ hết hạn hoặc có thể hết hạn bất cứ lúc nào. Các quá trình chuyển đổi cũng không bao giờ được giả định là có trong cơ sở dữ liệu, vì chúng có thể không được lưu trữ ở đó.

Hơn nữa, có thể tạm thời không có sẵn trước thời gian hết hạn. Giống như những gì được thực hiện với bộ nhớ đệm, mã của bạn phải có phương pháp dự phòng để tạo lại dữ liệu nếu quá trình tạm thời không khả dụng.

Function Reference #Function Reference

Set/Get Transient:

Delete Transient:

Using Transients

Saving Transients

To save a transient you use set_transient():

set_transient( $transient, $value, $expiration );
$ transient (string): Tên tạm thời.
Dự kiến sẽ không bị thoát SQL. Phải có độ dài từ 172 ký tự trở xuống.
$ value (array | object): Dữ liệu cần lưu, một biến thông thường hoặc một mảng / đối tượng.
API sẽ xử lý tuần tự hóa dữ liệu phức tạp cho bạn.
$ expiration (integer): Số giây tối đa để giữ dữ liệu trước khi làm mới.
Người nhận có thể hết hạn trước khi $ hết hạn (Do Bộ nhớ đệm Đối tượng Bên ngoài hoặc do nâng cấp cơ sở dữ liệu) nhưng sẽ không bao giờ trả lại giá trị của chúng sau khi $ hết hạn.

So for example to save the $special_query_results object for 12 hours you would do:

set_transient( 'special_query_results', $special_query_results, 60*60*12 );

Using Time Constants

In WordPress 3.5, several constants were introduced to easily express time:

MINUTE_IN_SECONDS  = 60 (seconds)
HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
MONTH_IN_SECONDS   = 30 * DAY_IN_SECONDS
YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS

So for example, the code sample from above can be simplified to:

set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );

Fetching Transients

To get a saved transient you use get_transient():

get_transient( $transient );

$transient: the unique slug used while saving the transient with set_transient().

In our case we could fetch our special query results with:

get_transient( 'special_query_results' );

Nếu quá trình tạm thời không tồn tại hoặc đã hết hạn, thì get_transient () sẽ trả về false. Điều này nên được kiểm tra bằng cách sử dụng toán tử nhận dạng === thay vì toán tử bình đẳng thông thường ==, vì giá trị số nguyên bằng 0 (hoặc dữ liệu "trống" / "falsey" khác) có thể là dữ liệu bạn muốn lưu trữ. Do giá trị "false" này, không nên sử dụng quá độ để giữ các giá trị boolean thuần túy (true / false). Đặt chúng vào một mảng hoặc chuyển đổi chúng thành số nguyên.

Example usage:

if ( false === ( $value = get_transient( 'value' ) ) ) {
    // this code runs when there is no valid transient set
}

Đoạn mã trên sẽ lấy tạm thời và đặt nó vào $value. Mã bên trong khối if chỉ chạy khi không có một đoạn tạm thời hợp lệ để nó lấy. Đây thường là một phương pháp để tạo lại giá trị tạm thời thông qua các phương tiện khác. Xin lưu ý rằng có thể thời gian tạm thời không khả dụng trước thời gian hết hạn thông thường.

Removing Saved Transients

Tính năng tạm thời của chúng ta sẽ tự nhiên chết vì tuổi già sau khi $ hết hạn giây trôi qua kể từ lần cuối chúng ta chạy set_transient (), nhưng chúng ta có thể buộc tạm thời chết sớm bằng cách xóa nó theo cách thủ công. Điều này hữu ích cho những thời điểm khi một hoạt động nhất định (lưu bài đăng, thêm danh mục, v.v.) sẽ làm cho dữ liệu được lưu trong bộ nhớ cache đã cũ và cần cập nhật.

delete_transient( $transient );

$transient: the unique name used when saving with set_transient().

In our case, obviously, this would be:

delete_transient( 'special_query_results' );

WordPress không thường xuyên dọn dẹp các quá trình chuyển tiếp đã hết hạn. Để ngăn quá trình chuyển tiếp đã hết hạn tích tụ trong cơ sở dữ liệu, một phương pháp hay là luôn xóa tạm thời của bạn sau khi bạn đã hoàn tất và không cần nữa.

Complete Example

Putting it all together here is an example of how to use transients in your code.

<?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
  $special_query_results = new WP_Query('cat=5&amp;order=random&amp;tag=tech&amp;post_meta_key=thumbnail');
  set_transient('special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS);
}
// Use the data like you would have normally...
?>

And an example of using delete_transient(). In this case we’ll add a function to the edit_term action, which will run every time a category or tag is edited (i.e. we’re assuming that the editing of a term invalidates our data and we want to remove the cached version).

Use transients with WP_Query to retrieve “featured posts”:

<?php
// Check for transient. If none, then execute WP_Query
if (false === ($featured = get_transient('foo_featured_posts'))) {
  $featured = new WP_Query(
    array(
      'category'       => 'featured',
      'posts_per_page' => 5,
    )
  );
  // Put the results in a transient. Expire after 60 seconds.
  set_transient('foo_featured_posts', $featured, MINUTE_IN_SECONDS);
}
?>
<?php if ($featured->have_posts()): ?>
    <?php while ($featured->have_posts()): $featured->the_post();?>
        // featured posts found, do stuff
    <?php endwhile;?>
<?php else: ?>
    // no featured posts found
<?php endif;?>
<?php wp_reset_postdata();?>

Việc sử dụng chuyển tiếp trong các plugin và chủ đề của bạn rất đơn giản và chỉ thêm một vài dòng mã bổ sung, nhưng nếu được sử dụng trong các tình huống phù hợp (truy vấn cơ sở dữ liệu dài / đắt tiền hoặc dữ liệu được xử lý phức tạp), nó có thể tiết kiệm vài giây thời gian tải trên trang web của bạn.

Last updated