我有一个 Wordpress 插件,它在 post/postmeta 更改发生后发送帖子数据。
问题是在繁忙的 Wordpress 网站上可能会有很多 postmeta 更改,所以我想将元更新去抖动/节流/聚合到单个 POST 调用,包裹在 1 秒的时间段内。
不知道如何处理这个,因为我已经使用异步语言一段时间了,并且找不到与 PHP 等效的 setTimeout。
有什么可分享的想法吗?
add_action( 'updated_post_meta', 'a3_updated_post_meta', 10, 4 );
function a3_updated_post_meta($meta_id, $post_id, $meta_key, $meta_value){
global $wpdb;
global $a3_types_to_send;
a3_write_log('---> u p d a t e d post m e t a');
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
$mongo_dest_address = 'http://localhost:8080/admin/dirty';
$reason = 'edit_meta';
$dirty_post_ids = get_option('a3_dirty_post_ids');
if(! is_array($dirty_post_ids) ){
$dirty_post_ids = array();
}
$dirty_post_ids[] = (int) $post_id;
update_option('a3_dirty_post_ids', array_unique($dirty_post_ids));
$object_type = $wpdb->get_var( $wpdb->prepare("select post_type from $wpdb->posts where ID = %d", $post_id) );
if(in_array($object_type, $a3_types_to_send)){
a3_send_post_trans($post_id, $reason);
}
}