不要在 Wordpress 上的 save_post 中自动保存期间运行代码



我在Wordpress中有一个自定义帖子类型,我想在帖子发布时运行自定义代码。不能在自动保存或更新期间。

function send_notification($post_id, $post){
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
if ( $is_autosave || $is_revision ) {
return;
}
if (get_post_type( $post_id ) == 'vip_post') {
send_message($post->post_content);
}
}
add_action('save_post', 'send_notification', 10, 2);

然而,我发现send_message函数被触发多次,而我在Post编辑器中编写一些东西,然后点击发布按钮。

您可以使用did_action检查已调用的操作?试试下面的代码:

function send_notification($post_id, $post){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
if ( $is_autosave || $is_revision ) {
return;
}
$times = did_action('save_post');
if( $times === 1 ){
if (get_post_type( $post_id ) == 'vip_post') {
send_message($post->post_content);
}
}
}
add_action( 'save_post', 'send_notification', 10, 2 );

上述代码的替代版本,具有早期返回。

function send_notification($post_id, $post){
if ( did_action( 'save_post' ) > 1 ){
return; 
} 
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
if ( $is_autosave || $is_revision ) {
return;
}
if (get_post_type( $post_id ) == 'vip_post') {
send_message($post->post_content);
}
}
add_action( 'save_post', 'send_notification', 10, 2 );

另外,您可以使用remove_action钩子删除您的操作。一旦你的函数被调用。

function send_notification($post_id, $post){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
if ( $is_autosave || $is_revision ) {
return;
}
if (get_post_type( $post_id ) == 'vip_post') {
send_message($post->post_content);
}
remove_action('post_save', 'send_notification');
}
add_action( 'save_post', 'send_notification', 10, 2 );

您可以通过使用wp_deregister_script注销脚本来完全禁用它。试试下面的代码。

add_action( 'admin_init', 'disable_autosave' );
function disable_autosave() {
wp_deregister_script( 'autosave' );
}

相关内容

  • 没有找到相关文章

最新更新