我目前正在使用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' );
然而,当我这样做时没有任何反应。我错过了一些简单化和无趣的东西吗?
答案 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)
答案 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'。