/ / Wordpress csv import duplicate - php, mysql, wordpress, csv

Wordpress csv import duplicate - php, mysql, wordpress, csv

Użyłem dostosowanej wersji importu csvwtyczka do wordpress. Importuje plik CSV, aby tworzyć i aktualizować posty. Aby zaktualizować istniejące posty, dodałem edycję, która odnajduje identyfikator postu według tytułu, a jeśli istnieje, zastępuje go, w przeciwnym razie tworzy nowy post.

Problem polega na tym, że wydaje się to nie być bardzo niezawodne! Jeśli kilka razy zaimportuję ten sam plik csv, nadpisuje większość z nich, ale otrzymuję kilka duplikatów. Czy jest jakiś sposób, aby uczynić to bardziej niezawodnym, czy też jest inny sposób radzenia sobie ze zduplikowanymi postami?

główna funkcja do tworzenia postów tutaj

 function create_post($data, $options) {
extract($options);
//edit 1 added here
global $wpdb;
//end

$data = array_merge($this->defaults, $data);
$type = $data["csv_post_type"] ? $data["csv_post_type"] : "post";
$valid_type = (function_exists("post_type_exists") &&
post_type_exists($type)) || in_array($type, array("post", "page"));

if (!$valid_type) {
$this->log["error"]["type-{$type}"] = sprintf(
"Unknown post type "%s".", $type);
}

$new_post = array(
"post_title"   => convert_chars($data["csv_post_title"]),
"post_content" => wpautop(convert_chars($data["csv_post_post"])),
"post_status"  => $opt_draft,
"post_type"    => $type,
"post_date"    => $this->parse_date($data["csv_post_date"]),
"post_excerpt" => convert_chars($data["csv_post_excerpt"]),
"post_name"    => $data["csv_post_slug"],
"post_author"  => $this->get_auth_id($data["csv_post_author"]),
"tax_input"    => $this->get_taxonomies($data),
"post_parent"  => $data["csv_post_parent"],
);

// edit 2 here
$new_post["ID"] = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_title = "" .   $data["csv_post_title"] . """ );
// ends

// pages don"t have tags or categories
if ("page" !== $type) {
$new_post["tags_input"] = $data["csv_post_tags"];

// Setup categories before inserting
$cats = $this->create_or_get_categories($data, $opt_cat);
$new_post["post_category"] = $cats["post"];
}

// edit 3
if(!empty($new_post["ID"])) {
$id = wp_update_post($new_post);
} else {
$id = wp_insert_post($new_post);
}
// ends

if ("page" !== $type && !$id) {
// cleanup new categories on failure
foreach ($cats["cleanup"] as $c) {
wp_delete_term($c, "category");
}
}
return $id;
}

dzięki

Odpowiedzi:

0 dla odpowiedzi № 1

Naprawiony! Użyłem wbudowanej funkcji wordpress, get_page_by_title . Oto kod, którego użyłem, aby skierować właściwy post.

if (!get_page_by_title( $bpp_title, "OBJECT", "publications")) {


$id = wp_insert_post($new_post);

} else {

$bpp_page = get_page_by_title( $bpp_title, "OBJECT", "publications");
$new_post["ID"] = $bpp_page->ID;

$id = wp_update_post($new_post);

}