<?php /** * Plugin Name: Importador XML Avanzado * Description: Permite subir un archivo XML desde el panel de administración y genera entradas evitando duplicados. * Version: 1.1 * Author: Tu Nombre */ if ( ! defined( 'ABSPATH' ) ) exit; // seguridad // Menú en administración add_action('admin_menu', 'importador_xml_menu'); function importador_xml_menu() { add_menu_page( 'Importador XML', 'Importador XML', 'manage_options', 'importador-xml', 'importador_xml_page', 'dashicons-database-import' ); } // Página del plugin function importador_xml_page() { ?> <div class="wrap"> <h1>Importador de Entradas desde XML</h1> <h2>Subir XML</h2> <form method="post" enctype="multipart/form-data"> <?php wp_nonce_field('importador_xml_nonce','importador_xml_nonce_field'); ?> <input type="file" name="archivo_xml" accept=".xml" required> <input type="submit" name="subir_xml" class="button button-secondary" value="Subir XML"> </form> <h2>Importar entradas</h2> <form method="post"> <?php wp_nonce_field('importador_xml_nonce','importador_xml_nonce_field'); ?> <input type="submit" name="importar_xml" class="button button-primary" value="Importar desde XML"> </form> </div> <?php // Procesar subida if (isset($_POST['subir_xml']) && check_admin_referer('importador_xml_nonce','importador_xml_nonce_field')) { importador_xml_subir(); } // Procesar importación if (isset($_POST['importar_xml']) && check_admin_referer('importador_xml_nonce','importador_xml_nonce_field')) { importador_xml_procesar(); } } // Subir archivo XML a /uploads/importador-xml/ function importador_xml_subir() { if (!empty($_FILES['archivo_xml']['tmp_name'])) { $upload_dir = wp_upload_dir(); $destino_dir = $upload_dir['basedir'] . '/importador-xml/'; if (!file_exists($destino_dir)) { wp_mkdir_p($destino_dir); } $destino = $destino_dir . 'datos.xml'; if (move_uploaded_file($_FILES['archivo_xml']['tmp_name'], $destino)) { echo "<div class='updated'><p>Archivo subido correctamente: " . esc_html($destino) . "</p></div>"; } else { echo "<div class='error'><p>Error al subir el archivo.</p></div>"; } } } // Procesar archivo XML y crear posts function importador_xml_procesar() { $upload_dir = wp_upload_dir(); $ruta = $upload_dir['basedir'] . '/importador-xml/datos.xml'; if (!file_exists($ruta)) { echo "<div class='error'><p>No se encontró ningún archivo XML en: $ruta</p></div>"; return; } $xml = simplexml_load_file($ruta); if (!$xml) { echo "<div class='error'><p>Error al leer el archivo XML.</p></div>"; return; } $contador = 0; foreach ($xml->item as $item) { $titulo = sanitize_text_field((string) $item->title); $contenido = wp_kses_post((string) $item->body); // Comprobar si ya existe un post con este título $existe = get_page_by_title($titulo, OBJECT, 'post'); if (!$existe) { $nuevo_post = array( 'post_title' => $titulo, 'post_content' => $contenido, 'post_status' => 'publish', 'post_author' => get_current_user_id(), 'post_type' => 'post' ); wp_insert_post($nuevo_post); $contador++; } } echo "<div class='updated'><p>Se importaron $contador nuevas entradas desde el XML.</p></div>"; }