stevegrunwell/wp-cache-remember

WordPress对象缓存和transients的辅助工具

安装数: 85,638

依赖项: 0

建议者: 0

安全性: 0

星标: 146

关注者: 8

分支: 11

开放性问题: 0

类型:wordpress-muplugin

v1.1.2 2022-07-08 18:13 UTC

This package is auto-updated.

Last update: 2024-09-08 22:58:51 UTC


README

Build Status Coverage Status GitHub release

WP Cache Remember 是一个简单的 WordPress 包,用于引入方便的新缓存功能。

构建良好的 WordPress 插件知道何时利用对象缓存和/或 transients,但它们通常会产生如下所示的代码

function do_something() {
    $cache_key = 'some-cache-key';
    $cached    = wp_cache_get( $cache_key );

    // Return the cached value.
    if ( $cached ) {
        return $cached;
    }

    // Do all the work to calculate the value.
    $value = a_whole_lotta_processing();

    // Cache the value.
    wp_cache_set( $cache_key, $value );

    return $value;
}

这种模式效果不错,但有很多重复的代码。此包从 Laravel 的 Cache::remember() 方法 中汲取灵感;使用 wp_cache_remember(),上面的相同代码变为

function do_something() {
    return wp_cache_remember( 'some-cache-key', function () {
        return a_whole_lotta_processing();
    } );
}

安装

安装此包的最佳方式是 通过 Composer

$ composer require stevegrunwell/wp-cache-remember

该包包含 composer/installers,这使您能够控制包的安装位置。例如,如果您在 WordPress 插件中使用 WP Cache Remember,您可能会将文件存储在 includes/ 目录中。为此,将以下内容添加到您插件的 composer.json 文件中

{
    "extra": {
        "installer-paths": {
            "includes/{$name}/": ["stevegrunwell/wp-cache-remember"]
        }
    }
}

然后,在您的插件内部,只需包含或要求该文件

require_once __DIR__ . '/includes/wp-cache-remember/wp-cache-remember.php';

作为插件使用

如果您愿意,该包还包括作为 WordPress 插件使用的必要文件头。

下载或克隆包后,将 wp-cache-remember.php 文件移动到您的 wp-content/mu-plugins/ 目录(推荐)或 wp-content/plugins/ 目录中。如果您选择了常规插件目录,您需要通过在 WP 管理中的“插件”>“已安装插件”页面手动激活插件。

在插件或主题中打包

WP Cache Remember 已以易于在 WordPress 插件或主题中打包的方式进行构建,即使是商业用途。

每个函数声明都包含适当的 function_exists() 检查,确保在同一个 WordPress 环境中可以存在多个库的多个副本。

使用方法

WP Cache Remember 为 WordPress 提供以下功能

每个函数都会检查回调的响应是否为 WP_Error 对象,以确保您不会长时间缓存临时错误。PHP 异常也不会被缓存。

wp_cache_remember()

从对象缓存中检索值。如果不存在,运行 $callback 生成并缓存该值。

参数

(string) $key
缓存键。
(callable) $callback
用于生成和缓存值的回调。
(string) $group
可选。缓存组。默认为空。
(int) $expire
可选。缓存条目应失效前的秒数。默认为 0(尽可能长时间)。

示例

function get_latest_posts() {
    return wp_cache_remember( 'latest_posts', function () {
        return new WP_Query( array(
            'posts_per_page' => 5,
            'orderby'        => 'post_date',
            'order'          => 'desc',
        ) );
    }, 'my-cache-group', HOUR_IN_SECONDS );
}

wp_cache_forget()

从对象缓存中检索值并随后删除该值。

参数

(string) $key
缓存键。
(string) $group
可选。缓存组。默认为空。
(mixed) $default
可选。如果对象缓存中不存在给定键,则返回的默认值。默认为 null。

示例

function show_error_message() {
    $error_message = wp_cache_forget( 'form_errors', 'my-cache-group', false );

    if ( $error_message ) {
        echo 'An error occurred: ' . $error_message;
    }
}

remember_transient()

从 transients 中检索值。如果不存在,运行 $callback 生成并缓存该值。

参数

(string) $key
缓存键。
(callable) $callback
用于生成和缓存值的回调。
(int) $expire
可选。缓存条目应失效前的秒数。默认为 0(尽可能长时间)。

示例

function get_tweets() {
    $user_id = get_current_user_id();
    $key     = 'latest_tweets_' . $user_id;

    return remember_transient( $key, function () use ( $user_id ) {
        return get_latest_tweets_for_user( $user_id );
    }, 15 * MINUTE_IN_SECONDS );
}

forget_transient()

从 transients 缓存中检索值并随后删除该值。

参数

(string) $key
缓存键。
(mixed) $default
可选。如果 transients 中不存在给定键,则返回的默认值。默认为 null。

remember_site_transient()

从站点瞬态中检索一个值。如果不存在,运行 $callback 生成并缓存该值。

此函数与 remember_transient() 共享参数和行为,但在使用 WordPress 多站点时,它可以在整个网络上工作。

forget_site_transient()

检索并随后从站点瞬态缓存中删除一个值。

此函数与 forget_transient() 共享参数和行为,但在使用 WordPress 多站点时,它可以在整个网络上工作。

许可证

版权所有 2018 Steve Grunwell

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,源自、因或与软件或软件的使用或其他交易有关。