比较已更新帖子(或新帖子)的自定义分类[随进度更新]

时间:2012-10-09 作者:Zach

我正在使用Transients API 为自定义分类法缓存类别循环。所有这些都很好,但如果我添加了一篇新文章或更新了一篇现有的文章,我希望比较分类法值,然后根据ID中的差异清除瞬态,然后清除其他瞬态。瞬态具有以下格式,_transient_mouldings_cat_loop_141 哪里141 是ID。

有没有人对在保存帖子之前获取税额有什么建议(现有条款)(我认为应该是category_save_pre(), 但这只引用帖子类别,然后在保存时使用save_post() 要获取新值,请找到差异,然后删除所需的瞬态?

谢谢

更新

我能够删除类别瞬态save_post():

function mouldings_delete_transient_teaser($post_id) {
    switch (get_post_type()) {
        case \'moulding_profiles\':
            // delete teaser transient
            delete_transient(\'mouldings_moulding_profiles_teaser_\'.$post_id);

            // delete profile category transient
            $post_terms = get_the_terms($post_id, \'profile_categories\');
            foreach ($post_terms as $post_term) {
                delete_transient(\'mouldings_cat_loop_\'.$post_term->term_id);
            }
            break;
    }

}
add_action(\'save_post\',\'mouldings_delete_transient_teaser\');
但我仍然需要能够插入初始负载。我在想load_(page) 我可以在其中创建一个函数,在保存项目之前获取帖子,然后在中调用该函数save_post() 可能只会给我新的类别(我已经有了)。欢迎提出任何建议

思考

我想知道这是否更适合将类别ID存储在会话变量中,然后继续save_post() 将这些与get_terms() (将有新的ID),然后通过delete_transient() 功能---因为我还没有遇到任何东西。。。

继续思考:

听起来WordPress中没有使用会话,而您可以通过wp-config.php, 我想知道是否有一个更简单的方法,我错过了。

更新#2

在与Tom进行了几个回合后,我相信这是正确的方式:

function mouldings_delete_transients ($object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids) {

    if (get_post_type() == \'moulding_profiles\' || get_post_type() == \'moulding_combination\') {
        $changed_cats = array_diff($tt_ids, $old_tt_ids);
        foreach ($changed_cats as $changed_cat) {
            delete_transient(\'mouldings_cat_loop_\'.$changed_cat);
        }
    }
}
add_action(\'set_object_terms\', \'mouldings_delete_transients\', 10, 6);
我唯一的问题是$old_tt_ids 保存帖子时不会调用。所以,我想做的是比较当前的类别,$tt_ids 对于旧类别,$old_tt_ids 并检测两者之间的变化。因此,如果选择了一个新类别,这将是差异的一部分。如果删除了一个类别(未选中),也将选择该类别。它似乎抓住了新的,但不是旧的。有人有什么想法吗?谢谢

1 个回复
SO网友:Tom J Nowell

使用set_object_terms

http://adambrown.info/p/wp_hooks/hook/set_object_terms?version=3.4&file=wp-includes/taxonomy.php

当帖子或页面被修改时,应该触发它。

以下是触发它的代码:

do_action(\'set_object_terms\', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids);
因此,您可以对照$object\\u id和分类法进行检查,并根据需要刷新临时缓存和重新生成。

具体而言,请清除中术语ID的术语缓存$tt_ids$old_tt_ids

结束

相关推荐

Transients API and multisite

我们正在使用Atlas HTML站点地图插件,该插件使用transients API缓存站点地图,调用如下:set_transient( \'dmac_html_sitemap\', $output, 60*60*24*7 ); 现在,我们还有一个多站点设置,我想知道瞬态存储在哪里,WP multisite是否将它们分开。它将选项分开,因为每个站点(博客)都有自己的DB表前缀(例如wp\\U 29\\U选项)。我在某个地方读到,瞬态可以用memcached存储,所以我猜后端存储是可插入的。这个问