Duplicate Post. Admin & CLI
Wordpress duplicate post, with multidate modal
by Pablo RM (pablo.rod@amorodio.es) · github.com/yondemon/ao-duplicate-post
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/yondemon/ao-duplicate-post/archive/refs/heads/main.zipPlugin de WordPress para duplicar posts y Custom Post Types con múltiples fechas desde:
- Interfaz de administración (lista y pantalla de edición).
- Línea de comandos (WP‑CLI).
- API REST.
Diseñado específicamente para flujos tipo eventos recurrentes, donde quieres clonar un contenido base cambiando solo la fecha (o varias fechas a la vez).
Características
- Enlace “Duplicar en:
- Lista de posts/CPT compatibles.
- Pantalla de edición (Clásico y Gutenberg, en el submit box).
- Modal en admin con:
- Textarea para introducir una fecha por línea.
- Soporte de fechas relativas (
+7,+14, etc.).
- Duplicado de:
- Contenido, título y estado.
- Metadatos (postmeta).
- Taxonomías y términos.
- API interna reutilizable desde:
- WP‑CLI: comando personalizado.
- REST API: endpoint para integraciones externas.
Instalación
-
Copia la carpeta del plugin en:
wp-content/plugins/ao-duplicate-post/ -
Estructura:
ao-duplicate-post/ ├── ao-duplicate-post.php # Plugin principal ├── src/ │ ├── ao-duplicate-post.class.php # Core + hooks admin │ ├── ao-duplicate-post-wpcli-handler.php # Handler WP-CLI │ └── ao-duplicate-post-rest-handler.php # Handler REST ├── style.css # Estilos del modal ├── script.js # Lógica JS del modal └── templates/ └── modal.php # HTML del modal -
Activa el plugin desde Plugins > Plugins instalados en el admin de WordPress.
Uso en el panel de administración
Enlace “Duplicar multifecha”
En los tipos de contenido soportados:
- Ve a Entradas > Todas las entradas o al listado de tu CPT.
- En cada fila verás el enlace “Duplicar multifecha” en las acciones de fila.
- También verás un botón “Duplicar multifecha” en la caja de publicar/actualizar de la pantalla de edición (Clásico y Gutenberg).
Modal de fechas
Al hacer clic en “Duplicar multifecha” se abre un modal con:
- Un textarea donde puedes escribir una fecha por línea.
- Ejemplos de formatos aceptados:
- Fecha absoluta:
2026-02-01
2026-02-01 18:00:00 - Fecha relativa (días):
+7
+14
- Fecha absoluta:
Reglas:
- Si la fecha es tipo
+N, se suman N días respecto a la fecha anterior (acumulativo). - Si introduces solo la fecha (
YYYY-MM-DD), se respeta la hora original del post base. post_modifiedse replica a la misma fecha/hora quepost_dateen cada duplicado.
Al enviar el formulario:
- El plugin crea tantos duplicados como líneas válidas.
- Muestra un mensaje con el número de posts creados.
- Opcionalmente recarga la lista para que los veas.
Uso por línea de comandos (WP‑CLI)
El plugin registra un comando personalizado de WP‑CLI (ajusta el nombre según tu implementación):
wp post ao-duplicate <ID> [json_file]
Ejemplos:
# Duplicar un post con fechas definidas en un archivo JSON
wp post ao-duplicate 123 dates.json
# Duplicar un post pasando JSON por STDIN
echo '{"post_date":["+7","+14","2026-02-01 18:00:00"],"post_status":"publish"}' \
| wp post ao-duplicate 123
Formato JSON esperado (mínimo):
{
"post_date": ["+7", "+14", "2026-02-01 18:00:00"],
"post_status": "publish"
}
post_datepuede ser:- String único.
- Array de strings (crea un duplicado por cada ítem).
- Fechas relativas se entienden respecto a la fecha del original y se van acumulando.
Uso vía REST API
El plugin expone una ruta REST (ajusta el namespace según tu código):
POST /wp-json/ao-duplicate-post/v1/duplicate/{id}
Ejemplo de petición:
curl -X POST \
https://tudominio.com/wp-json/ao-duplicate-post/v1/duplicate/123 \
-H "Content-Type: application/json" \
-H "X-WP-Nonce: TU_NONCE" \
-d '{
"post_date": ["+7","+14","2026-02-01 18:00:00"],
"post_status": "publish"
}'
Respuesta típica:
{
"success": true,
"count": 3,
"duplicates": [
{ "id": 456, "url": "https://tudominio.com/?p=456" },
{ "id": 457, "url": "https://tudominio.com/?p=457" },
{ "id": 458, "url": "https://tudominio.com/?p=458" }
]
}
Permisos:
- Solo usuarios con capacidad
edit_posts. - Protegido con nonce o el mecanismo de autenticación que uses (cookies, Basic Auth, JWT, etc.).
Seguridad
- Uso de nonces (
wp_create_nonce/wp_verify_nonce) en formularios y enlaces de admin para evitar CSRF. - Verificación de capacidades (
current_user_can('edit_posts')) antes de duplicar. - Sanitización de entrada (por ejemplo,
sanitize_textarea_fieldpara el textarea del modal). - Recomendar uso únicamente en el admin o en entornos autenticados.
Configuración y extensión
- Por defecto, la lógica de duplicado:
- Copia título, contenido, estado, metadatos y taxonomías.
- Ajusta
post_date/post_modifiedsegún las fechas indicadas.
- Puedes adaptar:
- El estado por defecto de los duplicados (
draft,publish, etc.). - El comportamiento del título (añadir sufijo, prefijo, etc.).
- El estado por defecto de los duplicados (
Revisa la clase principal Ao_Duplicate_Post en src/ao-duplicate-post.class.php para personalizar la lógica de negocio.
Desarrollo
- El código está organizado en clases:
Ao_Duplicate_Post: lógica de duplicado + hooks de admin.Ao_Duplicate_Post_WPCLI_Handler: integración con WP‑CLI.Ao_Duplicate_Post_REST_Handler: integración con REST API.
- El modal está implementado con HTML y JS simple (
script.js), apoyándose en el estilo nativo del admin (style.css).
Licencia
Pending...