我在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' );
}