请注意third input argument 对于save_post
回调,告诉我们是否是update or not. 我想这可能会有帮助。
以您的实际情况为例,一个建议可能是:
add_action( \'save_post\', function( $post_ID, $post, $update ) {
postUpdate( $post_ID );
if ( $update ) {
deleteCacheOnCloudfront( $post_ID, $post, $update );
}
}, 10, 3 );
运行
deleteCacheOnCloudfront()
函数之后
postUpdate()
仅用于发布更新。
这个save_post
是一个非常通用的钩子,还有更具体的钩子,比如save_post_{post_type}
或者其他基于post状态转换的,如果您想避免在运行代码时。不需要了。
这个postUpdate()
函数名非常通用,因此您应该考虑使用命名空间或函数前缀,以避免可能的名称冲突。
希望deleteCacheOnCloudfront()
运行速度快(超时时间短),不会让用户在每次后期保存期间等待太长时间。
希望有帮助!
Update:
如果
deleteCacheOnCloudfront()
取决于
$post_before
和
$post_after
我们可以考虑:
/**
* Run postUpdate() on save_post with priority 10.
*/
add_action( \'save_post\', function( $post_ID, $post, $update ) {
postUpdate( $post_ID );
}, 10, 3 );
/**
* Run deleteCacheOnCloudfront() on save_post with priority 11 when post is updated.
*/
add_action( \'post_updated\', function( $post_ID, $post_before, $post_after ) {
add_action( \'save_post\',
function( $post_ID, $post, $update ) use ( $post_before, $post_after ) {
deleteCacheOnCloudfront( $post_ID, $post_before, $post_after );
}, 11, 3 );
}, 10, 3 );
其中,我们使用
use
关键字并使用不同的优先级以确保
deleteCacheOnCloudfront()
(优先级11)在
postUpdate()
(优先级10),在
save_post
行动
我们也可以将其编写为类,以便跨不同的挂钩移动数据。