wp_insert_post () cria duplicatas com ‘post_status’ => ‘publicar’

Estou tentando adicionar postagens de um tipo de postagem personalizado em massa a partir de um arquivo .csv. Tudo funciona, exceto que ele adiciona o post duas vezes. Eles são exatamente os mesmos no database, exceto um tem o autor 1 e o outro tem o autor 2. Também ele anexa um ‘-2’ ao post_name. Aqui está o que eu tenho:

add_action('wp_loaded', 'add_from_csv', 10); function add_from_csv() { if (($handle = fopen(dirname(__FILE__) . "/posts.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $term_1 = $data[0]; $term_2 = $data[1]; $term_3 = $data[2]; $term_4 = $data[3]; $term_5 = $data[4]; $meta_1 = $data[5]; $meta_2 = $data[6]; $meta_3 = $data[7]; $meta_4 = $data[8]; $meta_5 = $data[9]; $meta_6 = isset($data[10]) ? $data[10] : ''; $post_id = wp_insert_post( array( 'post_title' => $meta_1 . ' ' . $meta_2 . ' ' . $meta_3 . ': ' . $meta_4, 'post_type' => 'custom_type', 'post_status' => 'publish', ) ); if(!is_wp_error($post_id) || $post_id != 0) { $tax_1_terms = array($term_1, $term_2, $term_3, $term_4); wp_set_object_terms( $post_id, $tax_1_terms, 'tax_1' ); wp_set_object_terms( $post_id, $term_5, 'tax_2' ); update_post_meta($post_id, 'meta-1', $meta_1); update_post_meta($post_id, 'meta-2', $meta_2); update_post_meta($post_id, 'meta-3', $meta_3); update_post_meta($post_id, 'meta-4', $meta_4); update_post_meta($post_id, 'meta-5', $meta_5); update_post_meta($post_id, 'meta-6', $meta_6); } else { echo 'There was a WP_Error when loading posts from csv!'; break; } } fclose($handle); } } 

Eu tenho isso em um plugin por si só. Se eu não definir ‘post_status’, e ele usa o status padrão de ‘rascunho’, então não há duplicatas. mas quando eu conjunto ‘post_status’ => ‘publicar’, ele insere o post duas vezes. Ambas as duplicatas têm status de publicação. Alguém pode me ajudar a resolver isso por favor? obrigado

Solutions Collecting From Web of "wp_insert_post () cria duplicatas com ‘post_status’ => ‘publicar’"

Peguei seu código minimizado e fiz um .csv com 3 linhas e conseguiu o mesmo erro que você.

No entanto, recebi três instâncias da mesma publicação. Não há coincidência de ter 3 linhas no meu csv. Seu código de inserção está correto, portanto, deve ser o gancho re-chamado cada vez que a inserção é triggersda.

Eu mudei o gancho para algo aparentemente random, mas muito específico para ser usuário-final e somente administrador, o gancho admin_notices , e funcionou, sem inputs duplicadas / triplicadas feitas para a carga de uma página eu habilitei o código.

Embora eu não tenha documentação para provar isso, acredito que muitos dos ganchos do WordPress voltem a triggersr com a binding wp_insert_post , e esse é o problema.

  // causes duplicates --- //add_action('wp_loaded', 'add_from_csv', 10); // no duplicates --- //add_action('admin_notices', 'add_from_csv', 10); function add_from_csv() { if (($handle = fopen(dirname(__FILE__) . "/posts.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $post_id = wp_insert_post( array( 'post_title' => $data[0], 'post_type' => 'post', 'post_status' => 'publish', ) ); if(!is_wp_error($post_id) || $post_id != 0) echo "
Added {$data[0]}

"; } fclose($handle); } }

Eu recomendaria criar uma página de configurações / opções de administração muito simples para hospedar seu código e fazer o código triggersr de um botão de envio de formulário, verificado com nonce .