sábado, 20 de julio de 2019

Crear un plugin de WordPress desde cero


Vamos a crear un plugin sencillo de WordPress completamente desde cero, para ello, crearemos una nueva carpeta en el directorio wp-content/plugins/  y añadimos un fichero. Por ejemplo, vamos a crear un plugin que se llame plugin-prueba. Para ello, creamos  la carpeta wp-content/plugins/plugin-prueba y añadimos un nuevo fichero dentro llamado plugin-prueba.php con el siguiente contenido:

<?php
/**
* Plugin Name: Plugin-Prueba
* Plugin URI: http://pluginprueba.es
* Description: Este plugin modifica los títulos de las entradas.
* Version: 1.0.0
* Author: Jose Pedro Pascual
* Author URI: http://analisisyprogramacion.com
* Requires at least: 4.0
* Tested up to: 4.3
*
* Text Domain: plugin-prueba
* Domain Path: /languages/
*/
defined( 'ABSPATH' ) or ( '¡Sin trucos!' );

Hecho esto, aparecerá en la pantalla de plugins de WordPress, y vemos en escritorio de WordPress -> Plugins, que nuestro nuevo plugin; Plugin-Prueba aparece correctamente listado, con su versión, su autor, su descripción, enlaces a nuestra web… WordPress está usando toda la información que hemos añadido en el comentario inicial de Plugin-Prueba.php.

Crear un plugin de WordPress desde cero


Lo activamos para que sea funcional. 
Cómo añadir alguna funcionalidad al plugin
Acabamos de crear un primer plugin, aunque no hace nada útil. Vamos a añadir un poco de funcionalidad al plugin. Añadimos código al final del fichero Plugin-Prueba.php :

<?php
add_filter( 'the_title', 'pluginprueba_cambiar_titulo', 10, 2 );
function pluginprueba_cambiar_titulo( $title, $id ) {
  $title = '[Modificado] ' . $title;
  return $title;
}
Plugin que añade un texto a los títulos

 Si ahora vamos a la página web, veremos que todos los títulos de las páginas y entradas incluyen el texto [Modificado]. Así, por ejemplo, la entrada ¡Hola mundo! ahora es [Modificado] ¡Hola mundo!.

Plugin de WordPress


Extender la información de las entradas

Vamos a ir más allá, en concreto, vamos a:

Modificar el editor de entradas. Añadiremos una nueva caja de edición en las entradas de WordPress donde podremos especificar un texto. Este texto será específico de cada entrada (como lo son el título o el contenido) y será una “Extensión del título”.

Guardar el nuevo campo. Modificaremos la información que WordPress almacena de una entrada y le añadiremos un campo adicional que nos permitirá almacenar y recuperar esa “extensión del título”.

Modificar el título con ese campo. Haremos que los títulos de cada entrada incluyan la extensión almacenada.

Añadir la caja de edición (meta box) en el editor de entradas:
Los meta boxes son cajas que nos permiten añadir información adicional a nuestra entrada (por ejemplo, una lista de etiquetas o las categorías a las que pertenece). Para crear un meta box utilizaremos la función del Codex de WordPress add_meta_box.

<?php
add_action( 'add_meta_boxes_post', 'pluginprueba_add_meta_boxes' );
function pluginprueba_add_meta_boxes() {
  add_meta_box(
    'pluginprueba-extension-titulo',
    'Extensión del Título',
    'pluginprueba_print_extension_titulo_meta_box'
  );
}
function pluginprueba_print_extension_titulo_meta_box( $post ) {
  //  vacio
}
Plugin de WordPress

Si vamos a la página de edición de entradas veremos la nueva meta box “Extensión del Título” vacía.

Plugin de WordPress

Para añadir contenido,  definimos el cuerpo de la función pluginprueba_print_extension_titulo_meta_box y escribimos:

<?php
function pluginprueba_print_extension_titulo_meta_box( $post ) { ?>
  <label for="pluginprueba-extension-titulo">Texto:</label>
  <input name="pluginprueba-extension-titulo" type="text" />
<?php
}

Plugin de WordPress


Ahora veremos la nueva meta box “Extensión del Título” con un campo de texto que el usuario podrá rellenar.



Guardar el nuevo valor

Usando la meta box podemos especificar qué texto hay que añadir en el título de una entrada cualquiera. Pero antes deberemos guardar este campo en la base de datos y hacerlo permanente. WordPress permite añadir cualquier tipo de información adicional a una entrada dada a través de los campos personalizados. 

<?php
add_action( 'save_post', 'wprincipiante_save_extension_titulo' );
function pluginprueba_save_extension_titulo( $post_id ) {
  // Si se está guardando de forma automática, no hacemos nada.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    return;
  }
  // Si nuestro campo de texto no está disponible, no hacemos nada.
  if ( ! isset( $_REQUEST[' pluginprueba-extension-titulo'] ) ) {
    return;
  }
  // Ahora sí, coger el valor del campo de texto y limpiarlo por seguridad.
  $texto = trim( sanitize_text_field( $_REQUEST[' pluginprueba-extension-titulo'] ) );
  // Guardarlo en el campo personalizado "_ pluginprueba_extension_titulo"
  update_post_meta( $post_id, '_ pluginprueba_extension_titulo', $texto );
}

Plugin de WordPress


En este caso, hemos creado una nueva función (pluginprueba_save_extension_titulo) que se ejecuta en el momento en que WordPress va a guardar una entrada en la base de datos (acción save_post)

Utilizar el nuevo campo en el front-end y en el back-end

La función encargada de pintar el campo de texto, definida antes.

<?php
function pluginprueba_print_extension_titulo_meta_box( $post ) { ?>
  <label for="pluginprueba-extension-titulo">Texto:</label>
  <input name="pluginprueba-extension-titulo" type="text" />
<?php
}

Cada vez que pintamos el campo de texto input, éste está vacío. Si queremos que muestre el valor del campo personalizado pluginprueba_ejemplo_extension_titulo, tendremos que recuperar ese valor de la base de datos.

<?php
function pluginprueba_print_extension_titulo_meta_box( $post ) {
  $post_id = $post->ID;
  $val = get_post_meta( $post_id, '_pluginprueba_extension_titulo', true ); ?>
  <label for="pluginprueba-extension-titulo">Texto:</label>
  <input name="pluginprueba-extension-titulo" type="text" value="<?php
      echo esc_attr( $val );
    ?>" />
<?php
}




Para recuperar el valor del campo personalizado, utilizamos la función get_post_meta con el identificador de la entrada y el nombre del campo. Despés escribimos el valor (en este caso, dentro del atributo value de la etiqueta input).
Sólo queda usar esta cadena de texto en el front-end. Ya tenemos definida una función (pluginprueba_cambiar_titulo) que modifica el título de las entradas. Ahora modificamos esa función para que utilice el nuevo valor:

<?php
function pluginprueba_cambiar_titulo( $title, $id ) {
  $texto = get_post_meta( $id, '_pluginprueba_extension_titulo', true );
  if ( ! empty( $texto ) ) {
    $title = $title . ' ' . $texto;
  }
  return $title;
}


Plugin de WordPress


Recuperamos de nuevo el valor utilizando la llamada que ya conocemos, comprobamos que ese valor realmente exista para la entrada y, si existe, lo añadimos al título.

Plugin de WordPress


Plugin de WordPress




No hay comentarios:

Publicar un comentario