Eliminar entradas en blanco en WordPress de forma masiva

  • Autor Autor Jose Miguel
  • Fecha de inicio Fecha de inicio
Jose Miguel

Jose Miguel

VIP
Lambda
SEO
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
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?
 
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 edición:
Insertar CODE, HTML o 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
 
Insertar CODE, HTML o 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.
 
Atrás
Arriba