Eliminar posts em branco no WordPress de forma massiva

  • Autor Autor Jose Miguel
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
Jose Miguel

Jose Miguel

VIP
1
Lambda
SEO
Verificación en dos pasos activada
Suscripción a IA
Pues eso, cree hace mucho una web con miles de urls y el 50% se creo solo con el titulo y sin contenido. Ando reparándola y quiero borrar del tirón todas las entradas vacías. ¿Como lo hacéis vosotros?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Pues eso, cree hace mucho una web con miles de urls y el 50% se creo solo con el titulo y sin contenido. Ando reparándola y quiero borrar del tirón todas las entradas vacías. ¿Como lo hacéis vosotros?

Te vas a Entradas --> Todas las entradas. A mi por ejemplo por defecto me aparecen 20 entradas. Si le das a Opciones de pantalla, en Número de elementos por página, puedes modificar el nº de entradas que quieres que aparezcan. Evidentemente si poner 1000, y tienes un hosting con pocos recursos, vas a tumbarlo. Elige menos cantidad. Una vez elegida, por ejemplo 50, marcas todas las que quieras eliminar, y le das a Acciones en Lote, Mover a la papelera, Aplicar. Este paso de eliminar también consume muchos recursos del hosting, mientras más entradas quieras eliminar, más posibilidades tendrás de tumbarlo. Te aconsejo hacerlo poco a poco.
 
Pues eso, cree hace mucho una web con miles de urls y el 50% se creo solo con el titulo y sin contenido. Ando reparándola y quiero borrar del tirón todas las entradas vacías. ¿Como lo hacéis vosotros?
Prueba con esto
 
Te vas a Entradas --> Todas las entradas. A mi por ejemplo por defecto me aparecen 20 entradas. Si le das a Opciones de pantalla, en Número de elementos por página, puedes modificar el nº de entradas que quieres que aparezcan. Evidentemente si poner 1000, y tienes un hosting con pocos recursos, vas a tumbarlo. Elige menos cantidad. Una vez elegida, por ejemplo 50, marcas todas las que quieras eliminar, y le das a Acciones en Lote, Mover a la papelera, Aplicar. Este paso de eliminar también consume muchos recursos del hosting, mientras más entradas quieras eliminar, más posibilidades tendrás de tumbarlo. Te aconsejo hacerlo poco a poco.
Si, pero el problema es que solo quiero borrar las entradas sin contenido.
 
Prueba con esto
Lo estuve mirando antes de preguntar aquí, pero no vi la opción de borrar entradas sin contenido. Tendré que revisarlo.
Gracias 😁
 
Lo estuve mirando antes de preguntar aquí, pero no vi la opción de borrar entradas sin contenido. Tendré que revisarlo.
Gracias 😁
Supongo son antiguas no podrás filtarlas por eso?
 
Lo estuve mirando antes de preguntar aquí, pero no vi la opción de borrar entradas sin contenido. Tendré que revisarlo.
Gracias 😁
Si no puedes filtrarlo por eso prueba con este proceso, es mas largo pero parece funcionar
 
Podrias hacer un query listando todos los post con contenido nulo sacando su ID y despues hacer un delete bulk de todos esos posts
 
Podrías hacerlo directo desde la base de datos usando la función CHAR_LENGTH()
 
Última edição:
Inserir CODE, HTML ou PHP:
function delete_poor_posts($post_type = 'post', $min_words = 20, $letters_x_word = 5){
  $posts = get_posts(array(
      'post_type'       => $post_type,
      'fields'          => 'ids',
      'meta_query' => array(
          array(
           'key' => 'is_poor',
           'compare' => 'NOT EXISTS'
          ),
      ),
      'posts_per_page'  => -1
  ));
  ini_set('max_execution_time', 0);
  foreach ($posts as $post_id) {
    $content_post = get_post($post_id);
    $content = $content_post->post_content;
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]>', $content);
    $content = explode(" ", strip_tags( $content ));
    $itsOK = 0;
    foreach ($content as $text) {
      if(strlen($text) >= $letters_x_word)$itsOK++;
    }
    if($itsOK < $min_words){
      wp_delete_post( $post_id, true );
    }else{
      update_post_meta($post_id, 'is_poor', 'no');
    }
  }
  die('fin');
}
if((current_user_can('editor') || current_user_can('administrator')) && isset($_GET['delete']) && $_GET['delete'] == 'now'){
  delete_poor_posts();
}
agrega este codigo en functions.php en tu tema
luego ve a tuweb.com?delete=now
ya terminado borra el codigo
 
Inserir CODE, HTML ou PHP:
function delete_poor_posts($post_type = 'post', $min_words = 20, $letters_x_word = 5){
  $posts = get_posts(array(
      'post_type'       => $post_type,
      'fields'          => 'ids',
      'meta_query' => array(
          array(
           'key' => 'is_poor',
           'compare' => 'NOT EXISTS'
          ),
      ),
      'posts_per_page'  => -1
  ));
  ini_set('max_execution_time', 0);
  foreach ($posts as $post_id) {
    $content_post = get_post($post_id);
    $content = $content_post->post_content;
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]&gt;', $content);
    $content = explode(" ", strip_tags( $content ));
    $itsOK = 0;
    foreach ($content as $text) {
      if(strlen($text) >= $letters_x_word)$itsOK++;
    }
    if($itsOK < $min_words){
      wp_delete_post( $post_id, true );
    }else{
      update_post_meta($post_id, 'is_poor', 'no');
    }
  }
  die('fin');
}
if((current_user_can('editor') || current_user_can('administrator')) && isset($_GET['delete']) && $_GET['delete'] == 'now'){
  delete_poor_posts();
}
agrega este codigo en functions.php en tu tema
luego ve a tuweb.com?delete=now
ya terminado borra el codigo
Me puedes explicar un poco que es este código antes de meterlo en mi web 😂🙏🙏
 
Me puedes explicar un poco que es este código antes de meterlo en mi web 😂🙏🙏
jajaja obtiene los ids de el post_type que quieras, por default entradas, luego toma el contenido y le elimina las etiquetas html, luego lo divide en palabras, mide la cuantas letras conforman esa palabra y si es buena palabra le asigna un numero positivo a la entrada, por ultimo si el numero positivo de la entrada es menor al numero de palabras lo elimina caso contrario le asigna un meta para no volver a realizar el proceso en esa entrada
 
Increíble. Pues en cuanto esté en el pc lo pruebo y cuento.
 
Voltar
Topo