只有在主帖子更新时,才应该使用什么钩子以编程方式创建帖子?

时间:2011-06-01 作者:m-torin

PippinJean-Baptiste Jung 有非常好的教程,介绍如何在使用以下四个操作挂钩发布新帖子时以编程方式创建内容。。。

发布{post\\u type}

  • 添加操作(\'new\\u to\\u publish{post\\u type},
  • 添加操作(\'draft\\u to\\u publish{post\\u type},
  • 添加操作(\'pending\\u to\\u publish{post\\u type}}

    global $user_ID;
    $new_post = array(
        \'post_title\' => \'My New Post\',
        \'post_content\' => \'Lorem ipsum dolor sit amet...\',
        \'post_status\' => \'publish\',
        \'post_date\' => date(\'Y-m-d H:i:s\'),
        \'post_author\' => $user_ID,
        \'post_type\' => \'post\',
        \'post_category\' => array(0)
    );
    $post_id = wp_insert_post($new_post);
    
    我应该使用什么钩子来执行此功能only 何时更新帖子?非常感谢。

    2 个回复
    最合适的回答,由SO网友:Bainternet 整理而成

    您可以使用pre_post_update 动作钩如下:

    add_action(\'pre_post_update\',\'post_updating_callback\');
    function post_updating_callback($post_id){
        global $post;
        // verify if this is an auto save routine. 
        // If it is our form has not been submitted, so we dont want to do anything
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
          return;
        if ($post->post_status == "publish"){
            //do update stuff here.
        }
    }
    
    更新时间:

    而不是wp_insert_post() 使用wp_update_post 像这样:

    //first get the original post
    $postarr = get_post($post_id,\'ARRAY_A\');
    
    //then set the fields you want to update
    $postarr[\'post_title\'] = "new title";
    $postarr[\'post_content\'] = "new edited content";
    
    $post_id = wp_update_post($postarr);
    
    这样,您只需指定已更新的字段,而不用担心原始帖子类型之类的问题。

    SO网友:Michal Mau

    这两个人可能是你的朋友:

    add_action(\'edit_post\',\'your_action\');
    
    add_action(\'pre_post_update\',\'your_action\');
    
    请参见:Action Reference: Post, Page, Attachment, and Category Actions 要获得更多灵感。。。

    附:这取决于上下文,但也要考虑使用wp_update_post 相反wp_insert_post.

    结束

    相关推荐

    Updates for a private plugin?

    如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点