2015-01-07 3 views
3

Я пытаюсь добавить сообщения в wordpress с сервера rets с помощью PHRETS. К сожалению, дубликаты сообщений добавляются. Я использовал запрос WP, чтобы проверить существующее сообщение, используя мета-ключ и значение. Этот код работает хорошо, когда я пытаюсь добавить 10 или 50 сообщений, но когда я устанавливаю ограничение до 4000, он начинает добавлять повторяющиеся сообщения. Я запустил этот код столько раз и много раз промывал базу данных. Вот пример кода:Почему Duplicate posts добавляются при получении данных с сервера RETS?

$query = "(922=MIAMI), (246=A)"; 
$search = $rets->SearchQuery("Property", $class, $query, array("SystemName" => 1, 'Limit' =>4550)); 

if ($rets->NumRows($search) > 0) { 
    $fields_order = $rets->SearchGetFields($search); 

    while ($record = $rets->FetchRow($search)) { 
     foreach ($fields_order as $fo) { 
      if ($fo == 'sysid') { $systemid = $record[$fo] ; } 
      if ($fo == '881') { $saddress = isset($record[$fo]) ? $record[$fo] : ""; } 
      if ($fo == '214') { $sremarks = isset($record[$fo]) ? $record[$fo] : ""; } 
     } 

     $porpertytitle = $saddress; 

     $args = array(
      'numberposts' => -1, 
      'post_type' => 'property', 
      'post_status' => 'publish', 
      'meta_key' =>'sysid', 
      'meta_value' => $systemid 
     ); 

     $the_query = new WP_Query($args); 

     if($the_query->have_posts()) { 
      while ($the_query->have_posts()) { 
       $the_query->the_post(); 
       unset($systemid); 
       unset($args); 
      } 
     } else { 
      $my_listing = array(
       'post_title' => $porpertytitle, 
       'post_type' => 'property', 
       'post_content' => $sremarks, 
       'post_status' => 'publish', 
      ); 

      $listing_post_id = wp_insert_post($my_listing); 

      if($listing_post_id > 0) { 
       update_post_meta($listing_post_id, 'sysid', $systemid); 
      } 

      unset($systemid); 
      unset($args); 
      unset($listing_post_id); 
     } 
     wp_reset_postdata(); 
    } 
} 

Извините за этот длинный код. Но я также попытался отключить переменные после каждого цикла, но не работал.

+0

Содержит ли он дубликаты всех записей или несколько? Можете ли вы разместить несколько не дублированных записей и записей, которые были дублированы. Пожалуйста, напишите полные полные записи, а не частичные. –

+0

Я не мог сказать, что он дублирует все записи или несколько, потому что он не соответствует шаблону. Некоторое время он дублирует все сообщения и некоторое время только несколько сообщений с тем же запросом и тем же кодом. Я думаю, что проблема заключается в том, если и хотя условие выше кода. потому что я думаю, что Wp_Query в порядке. И проблема в другом! –

+0

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

ответ

2

У меня была подобная, казалось бы, случайная проблема с дублированием. Наконец, я решил, что проблема заключается в том, что смещения сервера RETS основаны на 1, а не на основе нуля. Кроме того, если вы не пройдете смещение с вашим запросом, сервер будет сортировать результаты иначе, чем если бы вы это делали.

Если вы можете проверить отправку запроса на сервер, см., Включает ли он offset=1 по первому запросу. Если он равен нулю или отсутствует, вы получите повторы результатов первой страницы, разбросанных на последующих страницах, что может быть большим с размером 4000 страниц.