Seleccionar página

Crear plugin en WordPress – Programar tu primer Plugin

por | Jul 27, 2016 | Wordpress

Í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; 

  1. al trabajar en archivos independientes, no modificas directamente el núcleo de tu WordPress.
  2. 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

Plugin en WordPress

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: 

  1. Tiene que ser un nombre que describa bien la funcionalidad del plugin que vamos a crear.
  2. 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

Plugin en WordPress

3- Pulsar sobre Subir Plugin  

 Captura de pantalla 2016-10-25 a las 15.22.06

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

pluginenWordPress

Busca el plugin Duplicar PoPa y pulsa sobre activar.

Captura de pantalla 2016-10-25 a las 18.08.19

Captura de pantalla 2016-10-25 a las 18.09.13

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:

Captura de pantalla 2016-10-25 a las 18.14.51

y en el listado de páginas:

Captura de pantalla 2016-10-25 a las 18.16.28

Más Información sobre crear plugin en WordPress:
  1. Escribiendo un Plugin
  2. API Plugin
  3. Recursos de Plugins

6 Comentarios

  1. BooMeranGz

    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.

    Responder
    • Lph by Nerea Liébana

      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

      Responder
  2. Ivan

    para que funcione reemplazar en la linea 98 -> «duplicar_post_como_borrador» por «rd_duplicate_post_as_draft»

    Responder
    • Lph by Nerea Liébana

      Gracias Ivan, efectivamente había un par de errores en la línea 98.
      Hasta la próxima!

      Responder
  3. Juan Carlos Lopez Escalona

    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.

    Responder
    • Lph by Nerea Liébana

      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,

      Responder

Enviar un comentario

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