web-dev-qa-db-ja.com

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.php内のwp_insert_post()関数の終わりを見てください(WordPress 3.0.1。の2148行目から2392行目まで)WordPress投稿の追加と更新の両方にこの関数を使用します。

最後に次のコードがあります。このコードからwp_transition_post_status()の呼び出しを識別できます(詳細は後で説明します)。アクションフックedit_postpost_updatedsave_postwp_insert_post 1つではなく、後者の2つ)ニーズに合ったものを使用できます:

<?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まで) 。)3つあることに注意してください。必要に応じて使用します。

<?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"がトリガーされるため、productpublish状態に移行すると、アクションpublish_productがトリガーされます。

2
Jan Fabry