これwp_insert_post
は、 actionsave_post
を呼び出すためです。つまり、ループです。アクションを削除し、投稿を挿入して、アクションを再度追加する必要があります。
最初の保存を制御する方法のアイデアは、save_post アクションの更新と新しい投稿の確認からです。また、新しい投稿を作成するときに save_post アクションが起動するのはなぜですか?も参照してください。. auto-draft
との投稿ステータスのチェックを追加しましたinherit
。
<?php
/* Plugin Name: Publish to Network */
add_action( 'save_post', 'cross_publish_so_17611289', 10, 2 );
function cross_publish_so_17611289( $post_id, $post_object )
{
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if( defined( 'DOING_AJAX' ) && DOING_AJAX )
return;
# Block auto-drafts and revisions
if( in_array( $post_object->post_status, array( 'auto-draft', 'inherit' ) ) )
return;
$termid = get_post_meta( $post_id, '_termid', true );
# It's a new post
if( empty( $termid ) )
{
update_post_meta( $post_id, '_termid', 'update' );
remove_action( 'save_post', 'cross_publish_so_17611289' );
switch_to_blog(2);
$my_post = array(
'post_title' => $post_object->post_title,
'post_content' => $post_object->post_content,
'post_status' => 'publish',
'post_author' => $post_object->post_author,
);
wp_insert_post( $my_post );
restore_current_blog();
add_action( 'save_post', 'cross_publish_so_17611289', 10, 2 );
}
}