3

PHRETS を使用して、rets サーバーから wordpress に投稿を追加しようとしています。残念ながら、重複した投稿が追加されています。WP クエリを使用して、メタ キーと値を使用して既存の投稿を確認しました。このコードは、10 または 50 の投稿を追加しようとしているときにうまく動作しますが、制限を 4000 に設定すると、重複した投稿が追加され始めます。私はこのコードを何度も実行し、データベースを何度もフラッシュしました。コードサンプルは次のとおりです。

$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();
    }
}

この長いコードで申し訳ありません。しかし、ループごとに変数の設定を解除しようとしましたが、機能しませんでした。

4

1 に答える 1

2

私自身も同様の一見ランダムな重複問題を抱えていました。最終的に問題は、RETS サーバーのオフセットが 0 ベースではなく 1 ベースであることだと判断しました。また、リクエストでオフセットを渡さない場合、サーバーは渡した場合とは異なる方法で結果をソートします。

サーバーに送信されているリクエストを検査できる場合はoffset=1、最初のリクエストに含まれているかどうかを確認してください。ゼロまたは欠落している場合、最初のページの結果が後続のページに散らばって繰り返されます。これは、4000ページサイズで多くなる可能性があります

于 2015-03-03T07:39:48.037 に答える