save_post + insert_post = бесконечный цикл

Я пытаюсь автоматически создать новое сообщение, когда сохраняется сообщение, содержащее определенное настраиваемое поле – подключение функции insert_post в save_post.

Это создает бесконечный цикл.

Я нашел некоторые ответы на эту проблему, предлагая мне проверить тип сообщения перед вставкой.

Однако следующий код все еще дает бесконечный цикл, любые идеи?

add_action('save_post', 'createGallery'); function createGallery () { global $post; if ( $post->post_type == 'activity' ) { $gallerypost = array( 'post_content' => 'the text of the post', 'post_status' => 'publish', 'post_title' => 'Photo album', 'post_type' => 'post', 'post_author' => 1); wp_insert_post( $gallerypost ); } } 

Это связано с тем, что при первом запуске цикла $post это текущее сообщение. Но во второй раз, когда вы обойдете цикл, $ post не изменился. То же самое происходит и с 3-м, 4-м, 5-м и т. Д.

Поскольку переменная $ post является текущим сообщением этой страницы, а не записью, которую вы только что сохранили / вставили, оператор цикла, если оператор всегда будет истинным, и включит бесконечный цикл. Вместо проверки переменной $post вы должны проверить идентификатор сохраненного сообщения. Если мы посмотрим на вызов, который выполняет действие save_post :

 do_action('save_post', $post_ID, $post); 

Теперь мы видим, что save_post имеет параметры! Поэтому, если мы укажем, добавляя, что функция принимает 1 параметр:

 add_action('save_post', 'createGallery',1,1); 

Затем добавьте параметр идентификатора сообщения и используйте это вместо:

 function createGallery ($post_ID) { if ( get_post_type($post_ID) == 'activity' ) { $gallerypost = array( 'post_content' => 'the text of the post', 'post_status' => 'publish', 'post_title' => 'Photo album', 'post_type' => 'post', 'post_author' => 1); wp_insert_post( $gallerypost ); } } 

Тогда ваш бесконечный цикл должен исчезнуть! Если это не так, вы сделали значительный скачок к тому, чтобы сделать ваш код более точным, так как теперь вы работаете над правильными данными.

Я бы предупредил, что изменение 'post_type' => 'post', to 'post_type' => 'activity', приведет к повторному введению бесконечного цикла.