怎么查是什么样的省钱呢?

时间:2013-01-30 作者:Shimon S

我使用save_post 钩子,我必须知道在这个钩子函数中,它是否是一个发布(draft to publish ) 或者是更新,比如publish to publishdraft to draft.

有办法检查吗?

我不能使用draft_to_publish 勾选此链接,我将解释原因:
用户在网站上提问,问题保存为draft 职位。网站管理员写下答案,然后发布帖子。一个帖子有meta box “status”可以有下一个值:“not answered”、“treatment”、“answered”。站点管理员可以根据需要更改此值,但当他发布帖子(草稿发布或草稿私有)时,此元值必须自动更改为“已回答”(尽管input area 管理区域上有另一个值)。所以我有一个函数save_post 钩子,根据input area 价值观我也试着用draft_to_publish 钩子将“已应答”分配给元值。问题是save_post 总是在draft_to_publish, 因此,分配给draft_to_publish) 被的值覆盖input area.

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

实际上,有专门针对这个的钩子。法典has a pretty good overview.

基本上每次WordPress保存帖子时(通过wp_insert_post) 或者改变帖子的状态wp_transition_post_status 如下所示:

<?php
// in wp-includes/post.php
function wp_transition_post_status($new_status, $old_status, $post) {
    do_action(\'transition_post_status\', $new_status, $old_status, $post);
    do_action("{$old_status}_to_{$new_status}", $post);
    do_action("{$new_status}_{$post->post_type}", $post->ID, $post);
}
所以,如果你想检查一篇文章从一个发布转移到另一个发布,你可以这样做。。。

<?php
add_action(\'transition_post_status\', \'wpse83835_transition\', 10, 3);
function wpse83835_transition($new, $old, $post)
{
    if (\'publish\' == $new && \'publish\' == $old) {
        // do stuff
    }
}
或者这个。。。

<?php
add_action(\'publish_to_publish\', \'wpse83835_transition_again\');
function wpse83835_transition_again($post)
{
    // do stuff.
}

SO网友:david.binda

您可以使用另一个钩子定义更新时的操作。这个post_updated 挂钩的定义如下:

do_action( \'post_updated\', $post_ID, $post_after, $post_before);
在后期创建时不调用。变量$update设置如下:

   // Are we updating or creating?
    if ( !empty($ID) ) {
        $update = true;
        $post_ID = (int) $ID;
    } else {
        $update = false;
        $post_ID = 0;
    }
并且hook posts\\u updated在以下if语句中:

if ( $update ) {
        do_action(\'edit_post\', $post_ID, $post);
        $post_after = get_post($post_ID);
        do_action( \'post_updated\', $post_ID, $post_after, $post_before);
    }

    do_action(\'save_post\', $post_ID, $post);
    do_action(\'wp_insert_post\', $post_ID, $post);
要检查它是否是要发布的草稿,您需要检查$post\\U before->post\\U status和$post\\U after->post\\U status。

正如附录所示,这里是对ommit autosave的检查:

if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
        return;  

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴