在创建、编辑或删除新产品时,我可以删除一些瞬态文件,但如果它是管理面板上的批量操作,如批量编辑或移动到垃圾桶,则无法完成。
我使用了动作钩子'transition_post_status‘,每当有从旧状态到新状态的改变,或者如果是更新场景,那么我的临时删除代码就会被执行。但这不适用于批量编辑或批量移动到垃圾桶。
function ga_delete_transients( $new_status, $old_status, $post ) {//deletes transients if exists upon create,trash and update
global $post,$wpdb;
if ( $post->post_type !== 'product' ) return;
if($old_status!==$new_status|| $old_status == 'publish' && $new_status =='publish'){
$sql = "SELECT * FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')";
$ga_transient_result = $wpdb->get_results($sql);
if(!empty($ga_transient_result)){
$wpdb->query( "DELETE FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')" );
}
}
}
add_action( 'transition_post_status', 'ga_delete_transients', 10, 3 );
在创建、更新或移动到新产品的垃圾桶时,我删除了所有的瞬态,但在批量操作时,什么也没有发生。
发布于 2019-02-14 07:38:50
这个基于Wordpress custom post action hook的解决方案可以工作,但在批量删除帖子的情况下效果不佳,因为在我的代码中,任何批量删除都会使$post为空。
function ga_delete_transients($post) {
global $wpdb,$post;
if(isset($post)&&$post->post_type=='product' || !isset($post) ) {//doesn't work in case of bulk delete of posts
$sql = "SELECT * FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')";
$ga_transient_result = $wpdb->get_results($sql);
if(!empty($ga_transient_result)){
$wpdb->query( "DELETE FROM labtag_wp.wp_labtag_options WHERE `option_name` LIKE ('%\_transient\_ga_loop_products_%')" );
}
}
else{
return;
}
}
$all_actions = array('save_post','wp_delete_post','wp_trash_post');
foreach ($all_actions as $current_action) {
add_action($current_action, 'ga_delete_transients',1);
}
https://stackoverflow.com/questions/54679771
复制相似问题