2015-09-12 1 views
-1

Я знаю, это может показаться странным для некоторых, но я хотел бы дублировать сообщение о создании.wordpress create duplicate post on save/update

Когда сообщение создаются, я хотел бы, чтобы дублировать его, добавляя новые данные в название, а также обновление метаданных полей и изменениях таксономии он находится в

Вот что я сделал до сих пор.:

add_action('wp_insert_post', 'my_add_custom_fields'); 
function my_add_custom_fields($post_id) 
{ 
    if ($_POST['post_type'] == 'products') { 

     $my_post = array(
      'post_title' => get_the_title(), 
      'post_content' => '', 
      'post_status' => 'publish', 
      'post_type'  => 'products', 
     ); 

     $id = wp_insert_post($my_post); 
     update_post_meta($id,'keywords', get_the_title()); 
     wp_set_object_terms($id, 'New Term Here', 'platform'); 

    } 
    return true; 
} 

проблема у меня есть, это создает бесконечный цикл, создавая новые почтовые тысячи раз и не остановит, пока я не перезапустить Apache.

Оттуда вокруг этого?

ответ

0

Для этого вам нужен какой-то контроль, чтобы остановить его. например значение глобального значения

$GLOBALS['control']=0; 

    add_action('wp_insert_post', 'my_add_custom_fields'); 
    function my_add_custom_fields($post_id) 
    { 
     if ($_POST['post_type'] == 'products') { 

      //if control is on third iteration dont proceed 

      if($GLOBALS['control']===2) 
       return; 



      //add control here! 
      $GLOBALS['control']++; 

      $my_post = array(
       'post_title' => get_the_title(), 
       'post_content' => '', 
       'post_status' => 'publish', 
       'post_type'  => 'products', 
      ); 

      $id = wp_insert_post($my_post); 
      update_post_meta($id,'keywords', get_the_title()); 
      wp_set_object_terms($id, 'New Term Here', 'platform'); 

     } 
     return true; 
    } 
+0

ps дает вашему глобальному уникальное имя! на всякий случай там хранится что-то еще – David