Índice de contenidos
Cómo puedes crear plugin en WordPress
Este artículo te ayudará a implementar tu propio plugin en WordPress. Crearemos un plugin muy sencillo, cuya objetivo es que te familiarices con el concepto y tengas independencia para seguir avanzando en la creación de plugins para WordPress más sofisticados.
¿Qué es un Plugin WordPress?
Un plugin en WordPress es un programa o una agrupación de funciones escritas en lenguaje PHP que añaden nuevas funcionalidades o modifican las existentes a una web creada en WordPress.
Trabajar con plugins te ofrece entre otras dos ventajas;
- al trabajar en archivos independientes, no modificas directamente el núcleo de tu WordPress.
- la funcionalidad del plugin es independiente de las modificaciones y actualizaciones del tema.
Pasos para crear plugin en WordPress
Ejemplo – Plugin duplicar entradas o post
Vamos a crear un plugin sencillo cuya funcionalidad es la siguiente: añade un nuevo menú debajo del título de post y páginas que permite DUPLICAR cada post o página de tu web WordPress.
Su funcionamiento completo se explica en la siguiente entrada de este blog: Cómo duplicar post y páginas
Paso 1 para crear plugin en WordPress- Definir el nombre del plugin
Tenemos que pensar un nombre para el plugin. El nombre del plugin debe cumplir dos requisitos:
- Tiene que ser un nombre que describa bien la funcionalidad del plugin que vamos a crear.
- No puede ser un nombre que ya esté asignado a otro plugin. Los plugins se guardan todos en la misma carpeta de WordPress y dos plugins con el mismo nombre pueden dar lugar a errores.
Si ya has decidido como vas a nombrar al plugin que vas a crear, el siguiente paso es comprobar que el nombre no exista, por ejemplo en Google, en el repositorio: Listado de Plugins WordPress
Para seguir con nuestro ejemplo vamos a crear un plugin que llamaremos: «Duplicar PoPa»
Paso 2 para crear plugin en WordPress – Crear la carpeta que alojará los archivos
Creamos un carpeta que contendrá todos los archivos del plugin, en nuestro ejemplo vamos a crear la carpeta con el siguiente nombre: duplicar-popa.
El plugin se puede alojar sin carpeta, directamente subiendo el archivo a la carpeta plugins de WP pero es más limpio y ordenado si guardamos todos los archivos de cada plugin en una carpeta individual, yo suelo crear una carpeta para cada plugin.
Paso 3 para crear plugin en WordPress – Archivos mínimos del Plugin
Un plugin en WordPress debe tener como mínimo un archivo PHP, dependiendo de la complejidad o funcionalidad del mismo puede contener más archivos php, JavaScript, CSS, archivo README… nuestro ejemplo es muy sencillo y sólo vamos a crear un archivo.
Llamaremos a nuestro archivo: duplicarPoPa.php (o si prefieres duplicarPostPag.php), el nombre que prefieras, no tiene que ser igual al del plugin sólo respetar la estructura de nombres de archivo php y que no sea un nombre reservado por WP.
Creamos el archivo PHP en un editor de textos como Notepad++ o el propio de Windows y copiamos y pegamos el siguiente código:
Código de cabecera del Plugin
<?php /* Plugin Name: Duplicar PoPa Plugin URI: https://laprogramaciondehoy.com/duplicar-post-y-paginas-sin-plugin/ Description: Añade un menú en la edición de post y páginas para duplicarlas y crea una nueva tipo borrador. Version: 1.0 Author: LpH Author URI: https://laprogramaciondehoy.com */ ?>
Puedes escribir más líneas de cabecera pero la única línea obligatoria para que el plugin funcione y WordPress reconozca que se trata de un plugin es la que describe en nombre del plugin: Plugin Name.
Plugin Name: Duplicar PoPa
Plugin URI es la URL de la página que explica el funcionamiento del plugins, añadimos también una pequeña descripción en description y versión, autor y web del autor.
Si necesitas más información sobre las líneas de cabecera adicionales al pie de página te he dejado varios enlaces que te pueden ayudar a completar más el ejemplo.
Función del Plugin
Debajo de las líneas de cabecera vamos a añadir la función PHP que realiza el trabajo de duplicar post y páginas.
<?php /* * Función duplica post como borrador y abre la ventana de edición del nuevo post */ function rd_duplicate_post_as_draft(){ global $wpdb; if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) { wp_die('No se ha seleccionado entrada para duplicar!'); } /* * id del post */ $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) ); /* * guarda todos los datos del post */ $post = get_post( $post_id ); /* * guarda el usuario que está duplicando, si quieres que se conserve el autor original del post, * cambia las siguientes dos líneas por ésta: $new_post_author = $post->post_author; */ $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; /* * si todo es correcto la variable post no esta vacía */ if (isset( $post ) && $post != null) { /* * nuevo array de datos del post */ $args = array( 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_author' => $new_post_author, 'post_content' => $post->post_content, 'post_excerpt' => $post->post_excerpt, 'post_name' => $post->post_name, 'post_parent' => $post->post_parent, 'post_password' => $post->post_password, 'post_status' => 'draft', 'post_title' => $post->post_title, 'post_type' => $post->post_type, 'to_ping' => $post->to_ping, 'menu_order' => $post->menu_order ); /* * inserta el post haciendo uso de la función wp_insert_post() */ $new_post_id = wp_insert_post( $args ); /* * todos los términos del post al nuevo borrador */ $taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag"); foreach ($taxonomies as $taxonomy) { $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs')); wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false); } /* * insertar post duplicado en la base de datos */ $post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"); if (count($post_meta_infos)!=0) { $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) "; foreach ($post_meta_infos as $meta_info) { $meta_key = $meta_info->meta_key; $meta_value = addslashes($meta_info->meta_value); $sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'"; } $sql_query.= implode(" UNION ALL ", $sql_query_sel); $wpdb->query($sql_query); } /* * redirecciona a la ventana de edición de post */ wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) ); exit; } else { wp_die('Error, no se puede encontrar el post: ' . $post_id); } } add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' ); /* * crear nuevo menú DUPLICAR */ function nuevo_link_duplicar_en_post( $actions, $post ) { if (current_user_can('edit_posts')) { $actions['duplicate'] = '<a href="admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID . '" title="Duplicar" rel="permalink">Duplicar</a>'; } return $actions; } /* * filtro para crear el menú duplicar en post */ add_filter( 'post_row_actions', 'nuevo_link_duplicar_en_post', 10, 2 ); /* * filtro para crear el menú duplicar en páginas */ add_filter( 'page_row_actions', 'nuevo_link_duplicar_en_post', 10, 2 ); ?>
Guarda el archivo dentro de la carpeta que hemos creado «duplicar-popa».
Paso 4 para crear plugin en WordPress – Instalando el plugin
Instalación desde el administrador de WordPress
1- Comprimir la carpeta «duplicar-popa» y guardar el archivo comprimido en una ubicación de fácil acceso.
2- Entrar en el administrador de WordPress y ir al menú Plugins >> Añadir Nuevo
3- Pulsar sobre Subir Plugin
4- Pulsar en Seleccionar Archivo, busca la carpeta que hemos creado duplicar-popa.zip, selecciona la carpeta y pulsa sobre Instalar Ahora.
5- Espera a que el plugin se instale y activa el plugin.
Instalación utilizando Filezilla u otro programa FTP
Abre el programa Filezilla y conecta con tu servidor, en la ventana derecha (tu ordenador) localiza la carpeta sin comprimir «duplicar-popa», en la parte derecha (archivos en el servidor) recorre el directorio siguiendo la siguiente ruta: wp-content/plugins/ dentro de la carpeta plugins es donde vamos a instalar la carpeta «duplicar-popa».
El plugin ya está instalado y puedes salir de Filezilla.
Por último para que el plugin funcione debemos activarlo. Entra en el administrador de WordPress y ve al menú Plugins >> Plugins Instalados
Busca el plugin Duplicar PoPa y pulsa sobre activar.
El Plugin en acción
Si has llegado hasta aquí quiere decir que has creado tu primer plugin, ahora puedes ver el resultado en el administrador de WordPress en el listado de post y páginas verás un nuevo submenú DUPLICAR, en los post o entradas:
y en el listado de páginas:
Más Información sobre crear plugin en WordPress:
Gracias por el aporte!
He seguido los pasos y en menos de 10 minutos tengo mi plugin para duplicar paginas funcionando perfecto.
La opción «Duplicar Paginas» debería venir por defecto en WordPress, realmente es muy necesaria y es una de las primeras faltantes que nota el usuario cuando se comienza a trabajar con el.
Salu2.
Muchas gracias por el comentario, opino lo mismo «Duplicar páginas» es una opción muy necesaria, también echo de menos «avanzar a la siguiente página». Todo llegará.
Saludos y feliz día
para que funcione reemplazar en la linea 98 -> «duplicar_post_como_borrador» por «rd_duplicate_post_as_draft»
Gracias Ivan, efectivamente había un par de errores en la línea 98.
Hasta la próxima!
Hola muchas gracias por tus tutoriales, quería hacerte una pregunta, estoy desarrollando un plugin en el que los usuarios interactúan y en base a las opciones que seleccionan se crea un archivo PDF para que el usuario lo descargué, anteriormente he logrado eso con la librería PHPExcel para Excel pero no consigo una librería para PDF, si conoces alguna podrías recomendarme una que pueda incluir en mi plugin, gracias por tu valioso tiempo.
Buenas tardes Juan Carlos, yo he trabajado en algunos proyectos con la librería PHP FPDF, es libre y puedes usarla para cualquier tipo de proyecto, además toda la documentación la tienes en español: tutoriales, manuales, ejemplos de código…
Otra opción es la librería TCPDF, librería PHP Open Source. Con esta última no he trabajado pero me consta que es muy buena.
Saludos,