Проблемы с фильтром wp_insert_post и save_posts

У меня проблема с использованием wp_insert_post. Я добавляю возможность для сообщения одного типа для создания сообщения другого типа с первым сообщением в качестве родителя сообщения. Я тестировал несколько вещей, используя фильтр save_posts. Я создал функцию, которая просто создает сообщение, а затем подключает эту функцию к фильтру save_posts. Проблема, с которой я сталкиваюсь, заключается в том, что она добавляет записи экспоненциально в мою таблицу mySQL. Чем дольше я запускаю его до того, как я закрою на сервере, тем больше сообщений добавится. Есть ли лучший способ сделать это?

Пример кода:

public function save() { $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } add_action('save_post', array(&$this, 'save')); 

вы можете проверить, какой тип сообщения вызывает действие «save_post»:

 public function save() { global $post; if (!$post->post_type = 'video'){ $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } } add_action('save_post', array(&$this, 'save')); 

Возможно, из-за изменений – если у вас есть изменения, то этот пост предполагает, что сохранение происходит дважды специально – один раз для пересмотра и один раз для фактического сообщения. Ответ на этот пост (проверка для type = 'revision') кажется лучшим решением.

Благодаря @BAInternet для его решения. Проблема заключается в том, что, поскольку я создаю сообщение, функция сохранения вызывается дважды, поэтому количество сообщений увеличивается экспоненциально. Решение, которое я придумал, это:

 public function save() { global $post; global $flag; //Following code makes sure it doesn't get executed twice if($flag ==0) $flag =1; else return; //Next to temporarily disable this filter remove_action('save_post', array(&$this, __FUNCTION__)); $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } //restore save add_action('save_post', array(&$this, __FUNCTION__)); } add_action('save_post', array(&$this, 'save'));