Como crear bulk actions personalizadas en la lista de posts con PHP en WordPress

Contents

Introducción

En este tutorial detallado explico cómo añadir acciones masivas (bulk actions) personalizadas a la lista de entradas (Posts) en el escritorio de WordPress usando PHP. Cubriré desde la adición del elemento en el menú desplegable hasta su procesamiento seguro, mostrando ejemplos concretos y buenas prácticas: verificación de permisos, NONCE, redirección con mensajes y consideraciones de rendimiento.

Requisitos y contexto

  • Conocimientos básicos de PHP y WordPress (hooks/filters, capacidades, metadatos).
  • Acceso para añadir código en un plugin o en functions.php (recomendado: un plugin personalizado para mantener la lógica separada).
  • Este tutorial usa los hooks estándar de WP para las listas de posts: bulk_actions-edit-{post_type} y handle_bulk_actions-edit-{post_type}.

Visión general del flujo

  1. Registrar la nueva acción masiva para la pantalla de edición (lista de posts).
  2. Procesar el envío cuando el usuario aplica esa acción a varios posts.
  3. Redirigir a la lista mostrando un mensaje de éxito/errores.
  4. Asegurar permisos y validación (NONCE, capability checks) y considerar rendimiento.

1) Añadir la opción en el desplegable de Bulk Actions

Usamos el filtro bulk_actions-edit-post (si quieres otro tipo de contenido, reemplaza post por el slug del post type).


Notas:

  • La clave (aquí mark_featured) es el valor que WordPress enviará cuando se aplique la acción.
  • Si trabajas con un post type personalizado, cambia el hook a bulk_actions-edit-{mi_post_type}.

2) Procesar la acción masiva

El hook recomendado para procesar acciones masivas es handle_bulk_actions-edit-post. Este hook recibe 3 parámetros: la URL de redirección, la acción aplicada y un array con los IDs de los posts seleccionados. Debes validar permisos y NONCE y devolver la URL de redirección (posiblemente con parámetros que indiquen resultados para mostrar notificaciones).

 post_id, post_status => publish ) )

        processed  
    }

    // Añadimos un parámetro para mostrar una notificación en admin_notices
    return add_query_arg( bulk_mark_featured, processed, redirect_to )
}
?>

Explicación de seguridad y validación:

  • Se comprueba el _wpnonce usando wp_verify_nonce con la acción bulk-posts. Es la comprobación estándar que WP añade al form de acciones masivas.
  • Se valida capability individual con current_user_can(edit_post, post_id) para evitar que se procesen items que el usuario no pueda modificar.
  • Para acciones que modifican datos sensibles o cambian estado, considera registrar una acción diferente por separado o solicitar confirmación adicional antes del cambio.

3) Mostrar notificaciones (admin_notices)

Para informar al usuario del resultado usamos un parámetro en la URL de redirección y un hook admin_notices que lo detecta.

%s

, sprintf( _n( Se ha marcado %d entrada como destacada., Se han marcado %d entradas como destacadas., processed, mi-textdomain ), processed ) ) } if ( ! empty( _REQUEST[bulk_mark_featured_failed] ) ) { failed = intval( _REQUEST[bulk_mark_featured_failed] ) printf(

%s

, sprintf( _n( Falló el marcado en %d entrada., Falló el marcado en %d entradas., failed, mi-textdomain ), failed ) ) } } ?>

4) Ejemplo completo (plugin mínimo)

Copiar y pegar en un archivo de plugin (ej. mi-bulk-actions.php) colocado en wp-content/plugins/mi-bulk-actions/ y activarlo.

%s

, sprintf( _n( Se ha marcado %d entrada como destacada., Se han marcado %d entradas como destacadas., processed, mi-textdomain ), processed ) ) } if ( ! empty( _REQUEST[bulk_mark_featured_failed] ) ) { failed = intval( _REQUEST[bulk_mark_featured_failed] ) printf(

%s

, sprintf( _n( Falló el marcado en %d entrada., Falló el marcado en %d entradas., failed, mi-textdomain ), failed ) ) } } ?>

5) Buenas prácticas y consideraciones avanzadas

6) Casos de uso típicos

  1. Marcar/Desmarcar posts como destacados (meta flag).
  2. Cambiar el estado (publish -> draft / viceversa) para varios posts.
  3. Asignar una taxonomía o categoría a un lote de posts.
  4. Eliminar metadatos o limpiar datos personalizados en masa.

7) Errores comunes y cómo evitarlos

Conclusión

Crear acciones masivas personalizadas en la lista de posts de WordPress es directo usando los hooks adecuados y siguiendo buenas prácticas de seguridad y rendimiento. El patrón esencial es: registrar la acción (bulk_actions), procesarla (handle_bulk_actions), y notificar al usuario (admin_notices). Para entornos con muchos posts, delega el procesamiento a sistemas asíncronos o a lotes para no comprometer la experiencia de administrador.

Notas finales

Coloca el código en un plugin o en functions.php (mejor en plugin). Ajusta nombres, textos y lógica a tu caso (por ejemplo, cambiar update_post_meta por wp_update_post para alterar el estado). Reemplaza post por tu post type donde corresponda.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *