web-dev-qa-db-ja.com

publish_postフックでwp_insert_postを使用するとループを停止できない

publish_postおよびwp_insert_postフックを使用して、Worpdress Multisite環境で投稿が公開されたときに、その投稿を別のサイトにコピーするためのプラグインを作成しようとしています。コードは以下の通りです

function copy_post_to_blog($post_id) {

   $post = get_post($post_id, ARRAY_A); // get the original post

   $post['ID'] = ''; // empty id field, to tell wordpress that this will be a new post

   switch_to_blog(main_blog_id()); // switch to target blog

   wp_insert_post($post); // insert the post

   restore_current_blog(); // return to original blog
}

add_action('publish_post', 'copy_post_to_blog');

コードは動作していてブログに投稿データを挿入していますが問題は、自分でブラウザの実行を停止するまでループが新しい投稿の挿入を停止しないことです。初めてデータベースに投稿を挿入した後に停止するはずですが、そうではなく、無限に投稿を挿入し始めます。どうやってこの問題に乗るのか手伝ってください。

よろしくお願いします。

2
Syed Aqeel

wp_insert_post()関数は再びpublish_postフックを起動し、無限ループに陥ります。この変更を試してください。

remove_action('publish_post', 'copy_post_to_blog');
wp_insert_post($post);
add_action('publish_post', 'copy_post_to_blog');
1
johnh10