在wordpress中插入新帖子时触发操作

时间:2015-06-20 05:52:51

标签: wordpress

我的问题是,

在数据库中插入新帖子时是否会触发任何过滤器或操作。?

背后的原因是我想在管理员端插入新帖子时在post meta中添加键。

我的行动称为"save_post",但在推荐link之后。此动作触发创建并更新帖子。 但我只想在创建帖子而不是在更新时间

时添加元键

2 个答案:

答案 0 :(得分:1)

您正在寻找draft_to_publish

  

当帖子从{old_status}_to_{new_status}转换为{old_status}时,系统会执行{new_status}操作。该操作伴随着$post对象。

答案 1 :(得分:1)

您可以使用wp_insert_post,以便在插入后立即获得post_id,然后您可以使用该meta_key添加wp_insert_post

如果您没有使用action并希望使用if ( wp_is_post_revision( $post_id ) ) return; ,那么您只需将代码放在下面:

function

这意味着如果您要更新帖子,那么它将从get_post返回。

<强> EDITED

方法-1 来实现它。

您只需使用add_action('save_post', 'check_for_post_in_database'); function check_for_post_in_database($post_id) { //check if the post is in the database or not with get_post( $post_id ) == null if( get_post( $post_id ) == null ) { //your code to add meta } } //You can do same thing with publish_post 方法检查该帖子是否存在。如下所示:

add_action('publish_post', 'check_for_meta_in_database');
function check_for_meta_in_database($post_id) {
    global $wpdb;
    $your_meta = get_post_meta($post_id, 'meta_key', true);
    if( empty( $your_meta ) && ! wp_is_post_revision( $post_id ) ) {
        update_post_meta($post_id, 'meta_key', 'meta_value');
    }
}

方法-2 来实现它。

add_action( 'transition_post_status', 'check_transition_and_then_add_meta', 10, 3 );
function check_transition_and_then_add_meta( $new_status, $old_status, $post ) { 
    if ( ( 'draft' === $old_status || 'auto-draft' === $old_status ) && $new_status === 'publish' ) {
        add_post_meta($post->ID, 'your_meta_key', 'your_meta_value');
    }
}

但正如你所说,那里有很多元,这个方法会有点长。

方法-3 来实现它。

您可以按 rnevius 建议哪个甚至是我选择的那个。就像:

draft_to_publish

或者您可以使用//as rnevius suggested {$old_status}_to_{$new_status} add_action( 'draft_to_publish', 'add_meta_when_status_change' ); function add_meta_when_status_change() { add_post_meta($post->ID, 'your_meta_key', 'your_meta_value'); } 来执行此操作:

public function comments(){
    return $this->hasMany('App\Comments', 'post_id', 'id');
}

您可以参考codex了解有关转换后的详细信息。