是否在删除临时对象时挂钩操作?不能让它工作了!

时间:2015-05-23 作者:gordie

我正在开发一个插件,它会在请求时缓存远程页面。该文件是使用tempnam()创建的。我使用transient API.

一旦瞬态被Wordpress删除,我也想删除我的缓存页面。我确实尝试在hook上添加一个动作,但似乎没有启动。可能只有在使用delete_transient(), 当WP自动执行作业时,则不会。

我的另一个问题是,要删除我的文件,我需要在删除瞬态之前检索缓存文件的路径。。。

。。。但是删除后会触发deleted\\u瞬态钩子。删除之前还有另一个钩子(\'delete\\u transient\\u.$transient),但是。。。我需要知道临时运行它的名称。我的临时工有随机名字。。。

有什么想法吗?

1 个回复
SO网友:NoBugs

瞬态通常在读取时清除。如果要检查这种常见情况,可以捕获pre\\u transientname并查看它是否过期,与WP的操作方式相同:

function get_transient( $transient ) {

    /**
     * Filter the value of an existing transient.
     *
     * The dynamic portion of the hook name, `$transient`, refers to the transient name.
     *
     * Passing a truthy value to the filter will effectively short-circuit retrieval
     * of the transient, returning the passed value instead.
     *
     * @since 2.8.0
     *
     * @param mixed $pre_transient The default value to return if the transient does not exist.
     *                             Any value other than false will short-circuit the retrieval
     *                             of the transient, and return the returned value.
     */
    $pre = apply_filters( \'pre_transient_\' . $transient, false );
    if ( false !== $pre )
        return $pre;

    if ( wp_using_ext_object_cache() ) {
        $value = wp_cache_get( $transient, \'transient\' );
    } else {
        $transient_option = \'_transient_\' . $transient;
        if ( ! defined( \'WP_INSTALLING\' ) ) {
            // If option is not in alloptions, it is not autoloaded and thus has a timeout
            $alloptions = wp_load_alloptions();
            if ( !isset( $alloptions[$transient_option] ) ) {
                $transient_timeout = \'_transient_timeout_\' . $transient;
                if ( get_option( $transient_timeout ) < time() ) {
                    delete_option( $transient_option  );
                    delete_option( $transient_timeout );
                    $value = false;
                }
            }
        }

        if ( ! isset( $value ) )
            $value = get_option( $transient_option );
    }

    /**
     * Filter an existing transient\'s value.
     *
     * The dynamic portion of the hook name, `$transient`, refers to the transient name.
     *
     * @since 2.8.0
     *
     * @param mixed $value Value of transient.
     */
    return apply_filters( \'transient_\' . $transient, $value );
}
你也可以挂上过滤器pre_option__transient_timeout_<transientname> 捕获上面的get\\u选项,该选项恰好发生在删除之前,并检查该条件以查看它是否过期。只需确保在用于过滤这些参数的函数中返回第一个参数。

结束

相关推荐

Batcache消息不再位于页面源中

我已放置advanced-cache.php 和object-cache.php 在里面wp-contents 并已更新wp-config.php 具有define(\'WP_CACHE\', true);, 但我没有看到页面源中的消息告诉我页面是从缓存提供的。我有WordPress 3.8.1,APC Object Cache Backend 2.0.6, 和Batcache 1.2. 从前,我会在页面源代码中看到消息,但现在不再看到了。这涉及到几个WordPress安装。我确实看到插件显示在WordP