Php WordPress发布\自定义帖子类型的帖子挂钩未触发
我目前正在使用WP Job Board Manager插件进行一些工作,我想创建一个新作业发布时将启动的函数 我做的第一件事是创建通用钩子,以了解帖子类型: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'
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
}
}