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

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

He usado una versión adaptada de una importación CSVplugin para wordpress. Importa el csv para crear y actualizar posts. Para actualizar las publicaciones existentes, he agregado una edición que encuentra el ID de la publicación por título, luego, si existe, se sobrescribe, de lo contrario, crea una nueva publicación.

El problema es que parece no ser muy confiable! Si importo el mismo csv varias veces sobreescribe a la mayoría, pero obtengo algunos duplicados. ¿Hay alguna forma en que pueda hacer esto más confiable, o hay otra manera en que puedo lidiar con publicaciones duplicadas?

Función principal para crear publicaciones aquí.

 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;
}

Gracias

Respuestas

0 para la respuesta № 1

¡Fijo! Utilicé la función incorporada en wordpress, get_page_by_title . Aquí está el código que usé para apuntar la publicación correcta.

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);

}