使用‘DRAFT_TO_PUBLISH’挂钩(发布状态转换)

时间:2012-12-28 作者:AndrewJM

我正在尝试使用draft\\u to\\u publish挂钩(http://codex.wordpress.org/Post_Status_Transitions) 在发布作为草稿的帖子时运行函数。此挂钩似乎不起作用:

add_action(\'draft_to_publish\', \'myFunction\');
当我在插件中使用它时,myFunction永远不会被激发。我以前使用/测试过该功能。我知道这是挂钩,而不是myFunction的内容。

我找到的所有“解决方案”都只是指向上面的Codex页面的链接。你知道为什么这个钩子不起作用吗?

Edit:这里有一个例子。它不会发送电子邮件,因为操作不会触发:

function myfunction () {
        $to = "[email protected]";
        $subject = "Hi!";
        $body = "Hi,\\n\\nHow are you?";
        if (mail($to, $subject, $body)) {
          echo("<p>Message successfully sent!</p>");
         } else {
          echo("<p>Message delivery failed...</p>");
         }
    }
add_action(\'draft_to_publish\', \'myFunction\');

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

您当然有正确的挂钩,但请记住,您是将您的功能专门挂钩到draft_to_publish 操作,即针对数据库中预先存在的post对象的特定情况draft 状态更新为publish. 请注意,此操作会忽略Wordpress在创建新帖子时自动保存的草稿-这些“草稿”具有post_status 属于auto-draft.

我不太确定到目前为止您是如何调试该问题的,但如果您还没有调试,我建议您验证操作本身是否在您预期的时间内启动,也许可以通过为其附加一些简单、任意和明显的函数:

function kill_wp( $post ) {
  die( \'draft_to_publish fired for post #\' . $post[\'ID\'] . \' entitled, "\' . $post[\'post_title\'] . \'"\' );
}
add_action( \'draft_to_publish\', \'kill_wp\' );
也就是说,部分问题可能在于大写-示例中的操作回调引用了函数myFunction 定义的函数已命名myfunction.

虽然我不确定您想要完成什么,但您可以尝试将您的功能附加到the generic action transition_post_status 它传递了post的新状态、post的先前状态和post对象,这样您就可以获得类似于

function wpse77561_mail_on_publish( $new_status, $old_status, $post ) {
  if (get_post_type($post) !== \'post\')
        return;    //Don\'t touch anything that\'s not a post (i.e. ignore links and attachments and whatnot )

    //If some variety of a draft is being published, dispatch an email
    if( ( \'draft\' === $old_status || \'auto-draft\' === $old_status ) && $new_status === \'publish\' ) {
        $to      = \'[email protected]\';
        $subject = \'Hi!\';
        $body    = \'Hi,\' . chr(10) . chr(10) . \'How are you?\';

        if( wp_mail( $to, $subject, $body ) ) {
            echo(\'<p>Message successfully sent!</p>\');
        } else {
            echo(\'<p>Message delivery failed...</p>\');
        }
    }
}
add_action(\'transition_post_status\', \'wpse77561_mail_on_publish\');
还有许多工具可以让您更深入地了解Wordpress的操作执行,例如action hooks inspector 对于Debug Bar 插件。

结束

相关推荐

从unctions.php调用的Add_Actions未返回好值

我正试图通过这些功能为我的网站添加一些安全/访问防护。php。然而,每当我尝试通过函数添加时。php(而不是作为插件,我以前做过)失败(总是返回false)。例如:add_action(\"parse_query\", checkaccess()); // in functions.php 以及function checkaccess() { $allowAccess = false; if(is_admin()||is_front_page()||i