it-swarm.cn

为WordPress自定义帖子类型创建新帖子后调用函数?

假设我创建了一个新的帖子类型'product'。有没有办法在创建这个新的'product'帖子时执行一个函数(用户创建)?

7
dotty

在functions.php中:

function mynewproduct(){
    myfunction();
}
add_action( 'new_product', 'mynewproduct' );

有关更多和官方文档,请参阅此处:

http://codex.wordpress.org/Post_Status_Transitions

5
Tom J Nowell

@dotty:

看看文件/wp-includes/post.phpwp_insert_post()函数的结尾(在WordPress 3.0.1中的第2148行到第2392行.注意,WordPress使用此函数来添加和更新帖子。

最后它有以下代码。从这段代码中你可以识别对wp_transition_post_status()的调用(稍后会详细介绍)并且我们有动作挂钩edit_postpost_updatedsave_postwp_insert_post坦率地说我不知道​​为什么我们有后两个而不是一个。)您可以使用任何适合您需求的产品:

<?php
wp_transition_post_status($data['post_status'], $previous_status, $post);
if ( $update ) {
  do_action('edit_post', $post_ID, $post);
  $post_after = get_post($post_ID);
  do_action( 'post_updated', $post_ID, $post_after, $post_before);
}
do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);
return $post_ID;

正如@ Jan Fabry提到的那样,在wp_transition_post_status()中找到了动作钩子(在WordPress 3.0.1中的/wp-includes/post.php的2713到2717)。注意它们有三个;适当使用:

<?php
function wp_transition_post_status($new_status, $old_status, $post) {
  do_action('transition_post_status', $new_status, $old_status, $post);
  do_action("${old_status}_to_$new_status", $post);
  do_action("${new_status}_$post->post_type", $post->ID, $post);
}
3
MikeSchinkel

将调用 wp_transition_post_status 函数,这将触发"${new_status}_$post->post_type"动作,因此如果product移动到publish状态,则会触发publish_product动作。

2
Jan Fabry