Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress发布\自定义帖子类型的帖子挂钩未触发_Php_Wordpress_Hook_Custom Post Type - Fatal编程技术网

Php WordPress发布\自定义帖子类型的帖子挂钩未触发

Php WordPress发布\自定义帖子类型的帖子挂钩未触发,php,wordpress,hook,custom-post-type,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'

我目前正在使用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\u 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' );
然而,当我这样做的时候,什么也没有发生。我是不是错过了一些简单化和无趣的东西?

试试看

function newJobAdded($ID, $post) {

}
而不是

function newJobAdded() {

}

参考:

发布帖子”操作是特定于帖子类型的。因此,如果你有一个自定义的帖子类型,你需要改变你使用的钩子。如果您的帖子类型是
job\u listing
,那么您应该使用的钩子是
publish\u job\u listing

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

一个更通用的钩子是
transition\u post\u status
,每当post的状态发生变化时就会触发该钩子。您可以使用
$old\u status
$new\u status
检查帖子的先前和新状态,然后执行某些操作

对于一篇新文章,您可以这样做:(需要PHP5.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

    }
}

Vidya LB有最好的答案,因为您可以通过操作和类型限制钩子(发布作业公告=>
'publish\u job\u posting'
)。我只是想插话说你的第二个钩子不起作用,因为你没有在你的函数中传递
$post
变量,这应该在
add\u action
调用中完成。当您调用
get\u post\u type($post)时
在第一个函数中,
$post
实际上为空。它之所以起作用,是因为你已经在寻找的职位上。@JasonRoman你在
转换\u post\u status
方面有了更大的灵活性。在我的方法中,该函数仅在发布的新帖子上执行,并且当帖子类型为所选类型时,我认为这是不必要的-
publish\u job\u posting
会在发布新帖子或将其状态更改为publish时触发。您能告诉我“10,2”是用于什么吗?即“10,2'分别表示优先级和参数数,检查嘿,这很有效。但是,当用户保存已经存在的作业列表时,它也会触发。我可以将此更改为仅在首次发布时触发吗?非常感谢。请尝试添加一个条件语句,如if($post['post\u status']=='publish')&($\u post['original\u post\u status']!='publish'))这会导致:解析错误:语法错误,意外的T\u函数如果您使用的是早于5.3的PHP版本。查看我的更新
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

    }
}