我正在使用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
并检测两者之间的变化。因此,如果选择了一个新类别,这将是差异的一部分。如果删除了一个类别(未选中),也将选择该类别。它似乎抓住了新的,但不是旧的。有人有什么想法吗?谢谢