WP Manifestindependent plugin directory
manifest / admin / ao-duplicate-post

Duplicate Post. Admin & CLI

Wordpress duplicate post, with multidate modal

by Pablo RM (pablo.rod@amorodio.es) · github.com/yondemon/ao-duplicate-post

0stars
0forks

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.zip

Plugin 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

  1. Copia la carpeta del plugin en:

    wp-content/plugins/ao-duplicate-post/
  2. 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
  3. 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

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_modified se replica a la misma fecha/hora que post_date en 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_date puede 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_field para 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_modified segú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.).

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...