WordPress: ¿Cómo elimino la categoría “sin categorizar” de todas las publicaciones de forma masiva?

5 minutos de lectura

avatar de usuario
HandiworkNYC.com

Guión:

Tengo 1000 publicaciones que tienen la categoría “Sin categorizar” y quiero eliminar “Sin categorizar” de todas esas publicaciones y establecer una categoría diferente para esas publicaciones.

En otras palabras, tome todas las publicaciones sin categoría y muévalas a otra categoría, de una sola vez.

¿Puedo hacer esto a granel sin revisar cada publicación individualmente?

  • Simplemente cambie el nombre de su categoría en “Publicaciones -> Categorías” al nombre que desee.

    – la mano de NOD

    7 de marzo de 2020 a las 16:51

avatar de usuario
shawn hayes

Lo que estás buscando es el editor masivo de WordPress.

  1. Vaya a Publicaciones > Categorías > Sin categoría

  2. Haga clic en la pestaña “Opciones de pantalla” en la esquina superior derecha, luego cambie “Número de elementos por página:” a 1000. (Si está en un servidor realmente lento, podría considerar hacer menos a la vez)

  3. Ahora seleccione todos los elementos en la página y haga clic en el menú desplegable “Acciones masivas” arriba de seleccionar todo y seleccione la opción “Editar”.

  4. Presiona Aplicar

  5. En el editor masivo, haga clic en la “nueva categoría” a la que desea cambiar todas las publicaciones y presione actualizar.

Una vez que haya agregado todas las publicaciones a la “nueva categoría”, debe eliminar la categoría “Sin categorizar”. Para hacer esto:

  1. Ve a Ajustes > Escritura
  2. Ahora cambie la “Categoría de publicación predeterminada” a algo además de “Sin categorizar”
  3. Vuelva a Publicaciones > Categorías y elimine la categoría “Sin categorizar”.
  4. Ahora puede volver a crear la categoría “Sin categorizar” si lo desea y volver a cambiarla a la predeterminada.

Una vez que elimine la categoría “Sin categorizar”, se eliminará de todas sus publicaciones.

Si tiene algunas publicaciones que desea permanecer en “Sin categorizar”, cree una nueva categoría llamada “temp” y asigne todas las publicaciones que desea permanecer a esa categoría. Una vez que elimine “Sin categorizar”, créelo nuevamente y asigne las publicaciones en “temp” nuevamente a esa categoría.

Como ha descubierto, el editor masivo solo permite AGREGAR categorías a varias publicaciones; no es posible ELIMINAR categorías de varias publicaciones. La mejor opción que encontré fue instalar temporalmente este complemento https://wordpress.org/plugins/bulk-remove-posts-from-category/ (en el repositorio de WP) que agrega la capacidad de ELIMINAR categorías de varias publicaciones utilizando el mismo método de edición masiva. simplemente agrega una casilla adicional de ‘eliminar’ debajo de la lista de categorías.

La categoría sin categorizar tiene un ID de 1. Cuál será nuestro flujo de trabajo es,

  • Obtenga todas las publicaciones asignadas a la categoría sin categorizar.

  • Solo obtendremos ID de publicación, lo que hará que nuestra consulta sea hasta 1000 veces más rápida en un sitio con miles de publicaciones. Esto también ayudará a que nuestra consulta no agote el tiempo de espera o alcance un error fatal de memoria máxima.

Usar wp_set_object_terms() para eliminar y configurar nuestros nuevos elementos

NOTA:

El siguiente código requiere PHP 5.4+ y cualquier cambio no será reversible, así que primero haga una copia de seguridad de su base de datos

$args = [
    'nopaging' => true, // Gets all posts
    'cat' => 1, // Only gets posts assigned to category 1 which is the uncategorized category
    'fields' => 'ids', // Only get post ID's, make query up 1000 times faster on huge databases
];
$q = get_posts( $args );

if ( $q ) {

    foreach ( $q as $v ) {
        // Get all the post categories
        $categories = get_the_category( $v );
        $category_ids = []; 
        foreach ( $categories as $category ) {
            // Replace all uncategorized category instances with our new category id and build new array
            if ( $category->term_id == 1 ) {
                $category_ids[] = (int) 21; // REPLACE WITH THE CORRECT NEW CATEGORY ID
            } else { 
                $category_ids[] = (int) $category->term_id;
            }
        } 
        // Set our new categories to the post
        if ( $category_ids ) // Unnecessary check for categories, but just in case should something fail
            wp_set_object_terms( $v, $category_ids, 'category' );
    }

}

Tenga en cuenta que en ninguna parte hemos cambiado el $post datos posteriores globales o de configuración, por lo que no necesitamos llamar wp_reset_postdata() 🙂

WordPress almacena las relaciones padre/hijo entre categorías y publicaciones en el wp_term_relationships tabla, que se documenta aquí. Como señaló @Pieter Goosen, la categoría “Sin categoría” tiene un ID de 1. Así que puedes copia de seguridad de su base de datos SQLluego conéctese a él con un cliente de línea de comando SQL (sudo mysql wordpress funciona para mí), y ejecute este comando SQL:

delete from wp_term_relationships where term_taxonomy_id = 1;

Si quieres moverte todos publicaciones sin categorizar a otra categoría, puede usar el Movimiento masivo enchufar.

Si desea eliminar una categoría de alguno publicaciones, Eliminación masiva de publicaciones de la categoría podría ser una mejor opción.

avatar de usuario
usuario13549917

Como dijo Melebius, es mucho, mucho más rápido (y más fácil) de usar https://wordpress.org/plugins/bulk-remove-posts-from-category/ ! Funciona tanto con productos como con publicaciones. ¡Brillante!

avatar de usuario
HandiworkNYC.com

Puede agregar esto al archivo functions.php de su tema, luego actualizar cualquier página de su sitio una vez y luego eliminar la función.

¡Úselo bajo su propio riesgo y haga una copia de seguridad de la base de datos primero! No hay botón DESHACER en esto.

<?php
$args = array(
    'posts_per_page' => -1
);

$myposts = get_posts( $args );
foreach ( $myposts as $post ) :
    setup_postdata( $post );

    $categories = get_the_category();
    $catcount = count($categories);
    $postid = $post->ID;

    $catlist = array();

    //Building a list of categories for each post and EXCLUDING "uncategorized"

    foreach( $categories as $category ) {
        if($category->name == 'Uncategorized') {
            continue;
        }

        $catlist[] = $category->term_id;
    }

    // If there's just one category, and that category is "Uncategorized", move the category to one of your choosing
    if($catcount == 1 && $categories[0]->name == "Uncategorized") {
        // This is the category ID that you want to move uncategorized posts to
        $catlist = array(189);
    }

    wp_set_object_terms( $postid, $catlist, 'category' );


endforeach; 
wp_reset_postdata(); 
?>

  • Esto es extremadamente difícil de ejecutar y realmente costoso. No me sorprenderá si se agota el tiempo después de unos cientos de publicaciones.

    – Pieter Goosen

    23 de julio de 2015 a las 9:09

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad