WordPress publish_post挂钩不为自定义帖子类型触发

时间:2014-12-23 02:11:11

标签: php wordpress hook custom-post-type

我目前正在使用WP Job Board Manager插件进行一些工作,并且我想创建一个在发布新作业时将触发的功能。

我做的第一件事是创建一般钩子以找出帖子类型是什么:

function newJobAdded() {
    $posttype = get_post_type( $post );
    mail('email@email.com','new job published',$posttype);


 }
add_action( 'publish_post', 'newJobAdded' );

它向我发送了一封电子邮件,告诉我帖子类型是: job_listing 。 然后,我创建了一个新功能,只有在自定义帖子类型为 job_listing

时才会触发
function newJobAdded() {

   $posttype = "job_listing";

   if ($post->post_type == $posttype) {
    mail('email@email.com','new job published','done new job publish');
   }


 }
add_action( 'publish_post', 'newJobAdded' );

然而,当我这样做时没有任何反应。我错过了一些简单化和无趣的东西吗?

4 个答案:

答案 0 :(得分:10)

'publish_post'操作是特定于帖子类型的。因此,如果您有自定义帖子类型,则需要更改您使用的钩子。如果您的帖子类型为job_listing,则应使用的挂钩为publish_job_listing

function newJobAdded($ID, $post ) {
    mail('email@email.com','new job published','done new job publish');
 }
add_action( 'publish_job_listing', 'newJobAdded', 10, 2 );

答案 1 :(得分:2)

尝试

function newJobAdded($ID, $post) {

}

而不是

function newJobAdded() {

}

参考:publish_post

答案 2 :(得分:-1)

更通用的钩子将是transition_post_status,每当帖子的状态发生变化时它就会触发。您可以使用$old_status$new_status检查帖子的上一个和新状态,然后执行某些操作。

对于新帖子,您可以这样:(需要PHP 5.3 +

add_action( 'transition_post_status', function ( $new_status, $old_status, $post )
{

    if( 'publish' == $new_status && 'publish' != $old_status && $post->post_type == 'my_post_type' ) {

        //DO SOMETHING IF NEW POST IN POST TYPE IS PUBLISHED

    }
}, 10, 3 );

修改

对于旧版本,请使用

add_action( 'transition_post_status', 'so27613167_new_post_status', 10, 3 );
function so27613167_new_post_status( $new_status, $old_status, $post )
{

    if( 'publish' == $new_status && 'publish' != $old_status && $post->post_type == 'my_post_type' ) {

        //DO SOMETHING IF NEW POST IN POST TYPE IS PUBLISHED

    }
}

答案 3 :(得分:-1)

'publish_post'操作是特定于帖子类型的。因此,如果您有自定义帖子类型,则需要更改您使用的钩子。 IE,如果你的帖子类型是'job_listing',你应该使用的钩子是'publish_job_listing'。