API REST WordPress

Una de las características clave de WordPress es su capacidad para interactuar con otras aplicaciones a través de una API REST. Pero, ¿qué es una API REST? En pocas palabras, es un conjunto de reglas y protocolos que permiten a las aplicaciones comunicarse entre sí de manera eficiente.

Conceptos: rutas y endpoints

Además de comprender qué es una API REST, es importante entender las rutas y los endpoints. Las rutas son las direcciones que se utilizan para acceder a los recursos de una aplicación, mientras que los endpoints son los puntos finales de una ruta que ofrecen acceso a una función o conjunto de funciones. En el caso de WordPress, los endpoints de la API REST permiten acceder y manipular diferentes tipos de datos de WordPress, como publicaciones, páginas, usuarios y comentarios.

Código para functions.php

Para aprovechar al máximo la API REST de WordPress, es útil conocer una lista de funciones para functions.php que permiten añadir rutas y endpoints personalizados. Estas funciones permiten a los desarrolladores personalizar la API REST de WordPress para que se adapte a sus necesidades específicas, como crear rutas y endpoints personalizados para tipos de contenido personalizados o integrar con otras aplicaciones de terceros. Con estas funciones, las posibilidades son infinitas en cuanto a personalización de la API REST de WordPress.

Añadir endpoint personalizado

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/custom-endpoint/', array(
    'methods' => 'GET',
    'callback' => 'my_custom_endpoint_callback',
  ) );
} );

function my_custom_endpoint_callback( $request ) {
  // Aquí puedes escribir tu lógica personalizada para el endpoint
  return '¡Hola! Esta es una respuesta desde mi endpoint personalizado.';
}

Mostrar rutas y endpoints

add_action( 'rest_api_init', function () {
function list_endpoints() {
  global $wp_routes;

  // Iterar por todas las rutas registradas
  foreach ( $wp_routes as $route => $handlers ) {
    // Iterar por todos los handlers registrados para esta ruta
    foreach ( $handlers as $handler ) {
      echo $route . ' - ' . $handler['callback'] . '<br>';
    }
  }
}

add_action( 'admin_menu', 'register_list_endpoints_page' );
function register_list_endpoints_page() {
  add_menu_page(
    'Listado de endpoints',
    'Listado de endpoints',
    'manage_options',
    'list-endpoints',
    'list_endpoints'
  );
}

Lista de rutas por defecto

Aquí una lista de algunas rutas que incluye un sitio de WordPress

  • Route: /
  • Route: /batch/v1
  • Route: /oembed/1.0
  • Route: /oembed/1.0/embed
  • Route: /oembed/1.0/proxy
  • Route: /wp/v2
  • Route: /wp/v2/posts
  • Route: /wp/v2/posts/(?P[\d]+)
  • Route: /wp/v2/posts/(?P[\d]+)/revisions
  • Route: /wp/v2/posts/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/posts/(?P[\d]+)/autosaves
  • Route: /wp/v2/posts/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/pages
  • Route: /wp/v2/pages/(?P[\d]+)
  • Route: /wp/v2/pages/(?P[\d]+)/revisions
  • Route: /wp/v2/pages/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/pages/(?P[\d]+)/autosaves
  • Route: /wp/v2/pages/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/media
  • Route: /wp/v2/media/(?P[\d]+)
  • Route: /wp/v2/media/(?P[\d]+)/post-process
  • Route: /wp/v2/media/(?P[\d]+)/edit
  • Route: /wp/v2/menu-items
  • Route: /wp/v2/menu-items/(?P[\d]+)
  • Route: /wp/v2/menu-items/(?P[\d]+)/autosaves
  • Route: /wp/v2/menu-items/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/blocks
  • Route: /wp/v2/blocks/(?P[\d]+)
  • Route: /wp/v2/blocks/(?P[\d]+)/revisions
  • Route: /wp/v2/blocks/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/blocks/(?P[\d]+)/autosaves
  • Route: /wp/v2/blocks/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/templates
  • Route: /wp/v2/templates/(?P([^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)[\/\w-]+)
  • Route: /wp/v2/templates/(?P[\d]+)/revisions
  • Route: /wp/v2/templates/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/templates/(?P[\d]+)/autosaves
  • Route: /wp/v2/templates/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/template-parts
  • Route: /wp/v2/template-parts/(?P([^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)[\/\w-]+)
  • Route: /wp/v2/template-parts/(?P[\d]+)/revisions
  • Route: /wp/v2/template-parts/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/template-parts/(?P[\d]+)/autosaves
  • Route: /wp/v2/template-parts/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/navigation
  • Route: /wp/v2/navigation/(?P[\d]+)
  • Route: /wp/v2/navigation/(?P[\d]+)/revisions
  • Route: /wp/v2/navigation/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/navigation/(?P[\d]+)/autosaves
  • Route: /wp/v2/navigation/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/types
  • Route: /wp/v2/types/(?P[\w-]+)
  • Route: /wp/v2/statuses
  • Route: /wp/v2/statuses/(?P[\w-]+)
  • Route: /wp/v2/taxonomies
  • Route: /wp/v2/taxonomies/(?P[\w-]+)
  • Route: /wp/v2/categories
  • Route: /wp/v2/categories/(?P[\d]+)
  • Route: /wp/v2/tags
  • Route: /wp/v2/tags/(?P[\d]+)
  • Route: /wp/v2/menus
  • Route: /wp/v2/menus/(?P[\d]+)
  • Route: /wp/v2/users
  • Route: /wp/v2/users/(?P[\d]+)
  • Route: /wp/v2/users/me
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords/introspect
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords/(?P[\w\-]+)
  • Route: /wp/v2/comments
  • Route: /wp/v2/comments/(?P[\d]+)
  • Route: /wp/v2/search
  • Route: /wp/v2/block-renderer/(?P[a-z0-9-]+/[a-z0-9-]+)
  • Route: /wp/v2/block-types
  • Route: /wp/v2/block-types/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/block-types/(?P[a-zA-Z0-9_-]+)/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/global-styles/themes/(?P[^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)
  • Route: /wp/v2/global-styles/(?P[\/\w-]+)
  • Route: /wp/v2/settings
  • Route: /wp/v2/themes
  • Route: /wp/v2/themes/(?P[^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)
  • Route: /wp/v2/plugins
  • Route: /wp/v2/plugins/(?P[^.\/]+(?:\/[^.\/]+)?)
  • Route: /wp/v2/sidebars
  • Route: /wp/v2/sidebars/(?P[\w-]+)
  • Route: /wp/v2/widget-types
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)/encode
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)/render
  • Route: /wp/v2/widgets
  • Route: /wp/v2/widgets/(?P[\w\-]+)
  • Route: /wp/v2/block-directory/search
  • Route: /wp/v2/pattern-directory/patterns
  • Route: /wp-site-health/v1
  • Route: /wp-site-health/v1/tests/background-updates
  • Route: /wp-site-health/v1/tests/loopback-requests
  • Route: /wp-site-health/v1/tests/https-status
  • Route: /wp-site-health/v1/tests/dotorg-communication
  • Route: /wp-site-health/v1/tests/authorization-header
  • Route: /wp-site-health/v1/directory-sizes
  • Route: /wp-block-editor/v1
  • Route: /wp-block-editor/v1/url-details
  • Route: /wp/v2/menu-locations
  • Route: /wp/v2/menu-locations/(?P[\w-]+)
  • Route: /wp-block-editor/v1/export

Descripción de las funciones

  • add_action: Es una función del core de WordPress que permite registrar una función para que se ejecute en un punto específico del ciclo de vida de WordPress, como la carga de la página o la ejecución de una acción. Esta función es ampliamente utilizada en el desarrollo de temas y plugins de WordPress para personalizar y extender el funcionamiento de la plataforma.
  • register_rest_route: Es una función del core de WordPress que permite registrar una ruta personalizada para la REST API de WordPress. La REST API de WordPress permite a los desarrolladores interactuar con el contenido y los datos de WordPress a través de una interfaz API basada en HTTP. La función register_rest_route permite registrar una ruta personalizada, que luego puede ser utilizada para crear o actualizar contenido o realizar cualquier otra operación que esté permitida por la API.
  • callback: Es una función que se ejecuta cuando se solicita una ruta personalizada de la REST API de WordPress. Esta función recibe como parámetros la solicitud HTTP y la respuesta HTTP, y es responsable de procesar la solicitud y devolver una respuesta HTTP apropiada.
  • handler: Es una función que se ejecuta cuando se solicita un endpoint personalizado de WordPress. Esta función recibe como parámetros la solicitud HTTP y la respuesta HTTP, y es responsable de procesar la solicitud y devolver una respuesta HTTP apropiada.

Las funciones que se han proporcionado son:

  1. add_action('rest_api_init', 'register_custom_route'): Registra la función register_custom_route para que se ejecute en el evento rest_api_init. Esta función se encargará de registrar una ruta personalizada en la REST API de WordPress.
  2. function register_custom_route(): Define la función register_custom_route, que utiliza la función register_rest_route para registrar una ruta personalizada en la REST API de WordPress. Esta ruta personalizada se definirá utilizando el método GET y se llamará custom-endpoint.
  3. add_action('rest_api_init', function () use ($namespace) {...}: Registra una función anónima para que se ejecute en el evento rest_api_init. Esta función se encargará de registrar un endpoint personalizado en la REST API de WordPress. Se utiliza una función anónima en lugar de una función con nombre para mantener el espacio de nombres limpio.
  4. $namespace = 'my-namespace/v1';: Define una variable $namespace que se utilizará como el prefijo del namespace para los endpoints personalizados. Esto asegura que los endpoints personalizados no entren en conflicto con otros endpoints que puedan estar registrados en la REST API de WordPress.
  5. register_rest_route($namespace, '/custom-endpoint/(?P<id>\d+)', array(...));: Registra un endpoint personalizado en la REST API de WordPress utilizando la función register_rest_route. Este endpoint personalizado se llamará custom-endpoint y se definirá utilizando el método GET. La ruta también incluirá un parámetro dinámico id que aceptará un número entero.
  6. function my_custom_endpoint_callback($request) {...}: Define una función my_custom_endpoint_callback que se encargará de procesar la solicitud para el endpoint personalizado. Esta función recibe la solicitud HTTP como parámetro y devuelve una respuesta HTTP apropiada.

Hacer pruebas con Postman

Postman es una herramienta de colaboración y pruebas de API que permite a los desarrolladores crear, compartir, probar y documentar API de manera más eficiente. Con Postman, los usuarios pueden enviar solicitudes HTTP a una API y ver las respuestas en tiempo real, lo que facilita la depuración y el desarrollo de API. Además, Postman proporciona una interfaz de usuario fácil de usar y funciones avanzadas como la automatización de pruebas, la generación de documentación de API y la integración con sistemas de control de versiones.

Pequeña guía de Postman

Con estos sencillos pasos puedes empezar a utilizar Postman y practicar con la API REST de WordPress

  1. Descarga e instala Postman: Si aún no tienes Postman instalado en tu ordenador, lo primero que debes hacer es descargarlo e instalarlo desde su sitio web oficial.
  2. Crear una nueva solicitud en Postman: Abre Postman y haz clic en el botón «Nueva solicitud». A continuación, ingresa la URL de la API REST de WordPress que deseas probar. Por ejemplo, si deseas obtener una lista de publicaciones, ingresa la siguiente URL: http://tudominio.com/wp-json/wp/v2/posts.
  3. Seleccionar el método HTTP: Elige el método HTTP que deseas utilizar para la solicitud (GET, POST, PUT, DELETE, etc.) en la sección desplegable a la derecha de la URL.
  4. Añadir encabezados: Si es necesario, agrega encabezados a la solicitud. Por ejemplo, si deseas enviar datos de autenticación, debes agregar un encabezado de autorización. Puedes hacer esto haciendo clic en la pestaña «Encabezados» debajo de la URL y agregando los encabezados requeridos.
  5. Enviar la solicitud: Una vez que hayas configurado todo lo que necesitas, haz clic en el botón «Enviar» para enviar la solicitud. Verás la respuesta en la pestaña «Respuesta» debajo de la solicitud.
  6. Inspeccionar la respuesta: En la pestaña «Respuesta», verás la respuesta de la API REST de WordPress. Si se devuelve una respuesta JSON, Postman te la mostrará en un formato fácil de leer. Si hay algún error en la solicitud, también verás la información de error en esta pestaña.
  7. Prueba otras rutas: Para probar otras rutas de la API REST de WordPress, simplemente repite los pasos anteriores con la URL de la ruta que deseas probar.

Configurar BuddyPress

Logotipo de Wordpress

Instalamos y configurar BuddyPress en uno de nuestros subsitios con subdominio de Likone.es que usamos para pruebas, para posteriormente instalarlo de manera definitiva en un sitio con dominio propio.  

  1. Seleccionar los componentes
  2. Crear y asignar páginas

Paso 1 – Componentes

Habilitar el registro de usuarios a través de Settings > General > Allow, para que cualquier persona pueda registrarse en el sitio.


Paso 2 – Configurar Páginas

El próximo paso será configurar las páginas que usará BuddyPress. La mayoría de las páginas ya están creadas.

Pero nosotros sólo queremos BuddyPress en un subsitio, así que seguimos estos pasos de la página oficial del plugin

https://codex.buddypress.org/getting-started/installation-in-wordpress-multisite/#d-activate-buddypress-only-in-one-of-the-secondary-sites-of-the-network

La siguiente información está extraída directamente del enlace anterior:

Activate BuddyPress in only one of the Secondary Sites of the Network

  1. Go to Dashboard → Network Admin.
  2. Click on Sites link.
  3. Find the ID number of the site you want to be the root site of your BuddyPress installation.
  4. Open up your installation’s wp-config.php file.
  5. Adddefine ( 'BP_ROOT_BLOG', $blog_id );to your wp-config.php file where $blog_id is the ID number of your chosen site and save the file.
  6. Go to Dashboard → Network Admin.
  7. Add BuddyPress through Plugins → Add New.
  8. Navigate to the subsite which you identified in your wp-config.php file earlier
  9. Activate BuddyPress. You will be redirected to the BuddyPress Welcome screen.
  10. Configure BuddyPress.

Guía para la instalación de un nuevo sitio de WordPress en Likonet.es

He creado esta entrada como breve guía para seguir a la hora de crear un sitio nuevo de WordPress en Likonet.es de WordPress. Estas acciones están orientadas a añadir un sitio nuevo con dominio propio, aunque nuestro multisitio está basado en subdominios.

  • Adquirir un dominio y añadirle las DNS de nuestro hosting
  • Crear la base de datos del sitio con su usuario y contraseña, otorgándole los privilegios sobre la misma
  • Espera 24 horas a que se propaguen las DNS
  • Subir el archivo .zip de la instalación de WordPress a la carpeta del sitio y descomprimirlo
  • Instalar WordPress de la manera usual

Configuración de WordPress en Likonet.es con SiteOrigin

Ya tendremos nuestro dominio apuntado a nuestras DNS y los archivos preparados para empezar a instalar un nuevo sitio de WordPress en Likonet. Con esto sería más que suficiente para empezar, pero añadiré unos pasos más que servirán para comenzar a dar diseño al nuevo sitio con los plugins que estamos usando últimamente.

Usamos el plugin SiteOrigin para personalizarlo:

  • Instalar los plugins que usaremos para la personalización: SiteOrigin Page Builder y Site Origin Widget Bundle
  • Crear una página nueva, desde el editor de Site Origin (ver imagen al final de la lista)
  • Usualmente, eligir un «diseño preinstalado»
  • Ir a Apariencia > Personalizar, y en «Ajustes de la página de Inicio» elegir la página que hemos creado como página de inicio
  • Añadir algo de CSS elementos de la cabecera y algunos márgenes, desde Apariencia > Temas > Personalizar (el tema que esté activo) > CSS adicional

Añado algunas capturas del proceso que pueden servir de orientación.

Crear página desde editor de Site Origin
Diseño pre-instalado de Site Origin
Para editar bloques de Site Origin

Crear un sitio con subdominio en Likonet.es

Para crear un sitio con el dominio midominio.likones.es, tenemos que seguir una serie de pasos distinta, ya que la instalación es la de Likonet.es, no es necesaria una nueva base de datos ni subir archivos al servidor. Lo que sí es necesario en configurar el nuevo dominio en CPanel.

  • Ir a Cpanel > Subdominios
  • Configuramos el subdominio de la siguiente manera: nombre del subdominio: el que elijamos, dominio principal: Likonet.es, y carpeta de destino public_html.

Configuraremos el dominio nuevo desde la instalación de multisitio de Likonet.es

  • Añadimos el nuevo sitio desade Administrador de la red > Sitios > Añadir nuevo
  • En la dirección de URL escribimos el nombre del subdominio
  • Rellenamos todos los campos obligatorios.

Subsitio con dominio propio

Siguiendo las recomendaciones de la entrada de más abajo, podemos crear un sitio con subdominio y luego adjudicarle un dominio propio. Esto puede ser uy útil para ahorrar espacio en el hosting.

https://wetopi.com/es/wordpress-multisite-con-diferentes-dominios/

Lo siguiente está extraído del enlace anterior:

¡SÍ, Multisitio con Subdominios! – el mapeo de dominios funciona con el mismo modo de subdominios de WordPress – Antes de WordPress 4.5, la asignación de dominios requería de un plugin para gestionar la asignación de dominios.

Aunque te parezca extraño, tendrás que asignar al sitio un subdominio temporal. Luego WordPress ya te dará la opción de reemplazarlo por dominio completo.

Una vez añadido el Nuevo sitio, con su «Dirección URL» temporal – el subdominio – vuelve a editarlo (puedes hacerlo desde el listado de Sitios).

Es necesario hacer un ajuste en el archivo wp_config.php: del multisitio para que se pueda visitar el Escritorio con normalidad, porque el dominio de las cookies tiene que estar definido. Para ello, añadimos esta línea:

define('COOKIE_DOMAIN', $_SERVER['HTTP_HOST'] );

Insertar masivamente entradas en WordPress

Para crear muchas páginas de WordPress a la vez, he creado este fragmento de código que es válido par ala versión 4.5

Insertar entradas masivamente:

Es necesario editar los valores en negrita de forma correcta: las ID tienen que coincidir en la misma entrada, pero ha de ser única para cada una no repetirse en las otras. La «url-contenido» debe ser una frase en minúsculas con las palabras separadas por espacios. Hay que especificar la propia url en el campo «http://…», indicando el nombre del directorio de WordPress si fuera necesario, además de no olvidar que la ID va al final. Podemos editar a nuestro antojo las fechas de edición y publicación, así como la ID del autor (que vale 1 en nuestro ejemplo)

INSERT INTO `wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`)

VALUES

(ID, 1, '2016-01-01 00:00:00', '2016-01-01 00:00:00', 'CONTENIDO', 'Título de la página', 'publish', 'open', 'open', '', 'titulo-de-la-pagina', '', '', '2016-01-01 00:00:00', '', 0, 'http://eldominioque.sea/directorio/?p=ID', 0, 'post', '', 0),

(ID, 1, '2016-01-01 00:00:00', '2016-01-01 00:00:00', 'CONTENIDO', 'Título de la página', 'publish', 'open', 'open', '', 'titulo-de-la-pagina', '', '', '2016-01-01 00:00:00', '', 0, 'http://eldominioque.sea/directorio/?p=ID', 0, 'post', '', 0),

(ID, 1, '2016-01-01 00:00:00', '2016-01-01 00:00:00', 'CONTENIDO', 'Título de la página', 'publish', 'open', 'open', '', 'titulo-de-la-pagina', '', '', '2016-01-01 00:00:00', '', 0, 'http://eldominioque.sea/directorio/?p=ID', 0, 'post', '', 0);

Limpiar la tabla de revisiones

Útil para mantener la base de datos limpia. En la inserción de contenidos, ya que llega un momento que no necesitamos las revisiones de la entradas y podemos borrarlas rápidamente, ahorrando espacio.

DELETE FROM `basededatos`.`wp_posts` WHERE `post_type` = 'revision';

 

Estructura de archivos de WordPress y sus plantillas

Vamos a analizar de manera breve y sesgada la estructura de directorios de una instalación típica de WordPress.

Estructura de directorios de una instalación de WordPress

El directorio wp-content incluye, en concreto, dos directorios: plugins, que contendrá únicamente las carpetas y archivos de los plugins; y themes, donde se alojan las plantillas o temas. Éstas serán las ubicaciones de los plugins y temas que creemos o modifiquemos. El resto de los archivos, si bien es relevante, no nos interesa analizar ni modificar. Corresponden al funcionamiento de WordPress y el administrador de nuestro sitio, y de momento no profundizaremos en eso.

Contenido de wp-content

Estructura de archivos del tema de Worpress

Tema básico de WordPress

http://www.esandra.com/crear-plantilla-wordpress-desde-cero

/wp-content/themes/mitema

  • /images: Carpeta con las imágenes del tema.
  • /js: Carpeta con los archivos de JavaScript
  • style.css: Hoja de estilos del tema. Obligatoria para que el tema funcione.
  • index.php: Obligatorio para que el tema funcione. Por defecto será la página principal.
  • screenshot.png: Muestra la imagen en miniatura que se verá en el panel de adminsitración en Apariencia > Temas.
  • favicon.ico: La imagen que se verá en el navegador y al guardar el marcador.
  • header.php: Módulo que contiene la cabecera del tema.
  • sidebar.php: La barra lateral del tema. Nota: Si queremos más de una barra lateral, se habrán de configurar de modo manual.
  • footer.php: Módulo que contiene el pie de página del tema.
  • single.php: Este archivo indica cómo se ve una entrada de blog.
  • category.php: Muestra cómo se ve la página de resultados de una categoría.
  • tag.php: Muestra cómo se ve la página de resultados de una etiqueta.
  • search.php: Muestra cómo se ve la página de resultados de búsqueda.
  • template.php: Plantilla de página que a título de ejemplo llamaremos template.
  • functions.php: Archivo con las funciones de nuestro tema de WordPress.

Crear Widget de WordPress

Un Widget de WordPress se compone de dos partes:

  • Una función que instancia al Widget.
  • Una clase para nuestro Widget, que extiende al objeto WP_Widget.

Incluir el archivo widget.php en la carpeta
wp-content/widget/widget.php.

 

(adsbygoogle = window.adsbygoogle || []).push({});

Contenido de widget.php:

<?php

/*
Plugin Name: Mi primer Widget mpw
Plugin URI: http://www.txtplano.blogspot.com.es/
Description: Crea un Widget para añadir a cualquier Sidebar.
Version: 1.0
Author: JorgeGL
Author URI: http://www.txtplano.blogspot.com.es/
*/

/* Función que instancia el Widget
mpw viene de “Mi Primer Widget”, el nombre de la función podéis cambiarlo como queráis
 */


function mpw_create_widget(){
include_once(plugin_dir_path( __FILE__ ).’/widget/widget.php’);
register_widget(‘mpw_widget’);
}
add_action(‘widgets_init’,’mpw_create_widget’);

/* Extendemos la clase WP_Widget */

class mpw_widget extends WP_Widget {
    function mpw_widget(){
        // Constructor del Widget.
        $widget_ops = array(‘classname’ => ‘mpw_widget’, ‘description’ => «Descripción de Mi primer Widget» );
        $this->WP_Widget(‘mpw_widget’, «Mi primer Widget», $widget_ops);
    }

    function widget($args,$instance){
// Contenido del Widget que se mostrará en la Sidebar

        echo $before_widget;    
        ?>
        <aside id=’mpw_widget’ class=’widget myp_widget’>
            <h3 class=’widget-title’>Mi Primer Widget</h3>
            <p><?=$instance[«mpw_texto»]?></p>
        </aside>
        <?php
        echo $after_widget;


}

function update($new_instance, $old_instance){
$instance = $old_instance;
$instance[«mpw_texto»] = strip_tags($new_instance[«mpw_texto»]);
// Repetimos esto para tantos campos como tengamos en el formulario.
return $instance;
}

function form($instance){
?>
<p>
<label for=»<?php echo $this->get_field_id(‘mpw_texto’); ?>»>Texto del Widget</label>
<input class=»widefat» id=»<?php echo $this->get_field_id(‘mpw_texto’); ?>» name=»<?php echo $this->get_field_name(‘mpw_texto’); ?>» type=»text» value=»<?php echo esc_attr($instance[«mpw_texto»]); ?>» />
</p>
<?php
}

}

?>

Este widget incluye un formulario para incluir texto desde el administrador de WordPress y mostrarlo directamente en la página.

Luego sólo tendremos que activar el plugin desde el gestor de plugins de WordPress. Hecho esto,
vamos a Apariencia > Widgets y lo arrastramos a la
Sidebar
que mejor nos convenga.

Crear un sidebar par nuestros widgets

Ahora tenemos la posibilidad de crear un sidebar personalizado para anclar nuestros widgets. Con la sidebar no nos referimos a la barra lateral, sino a una zona cualquiera de la plantilla. Debemos elegir dónde insertar el código: si en functions.php o bien en el widget en cuestión. Se recomienda esto último, para no tener que editar el código del theme.

<?php
function miplugin_register_sidebars(){
    register_sidebar(array(
        «name» => «Nombre de la Sidebar»,
        «id» => «id-unico-para-la-sidebar»,
        «descripcion» => «Descripción de la Sidebar»,
        «class» => «clase-del-elemento»,
        «before_widget» => «<li id=’%1$s’ class=’%2$s’>»,
        «after_widget» => «</li>»,
        «before_title» => «<h2 class=’titulodelwidget’>»,
        «after_title» => «</h2>»
    ));
}
add_action(‘widgets_init’,’miplugin_register_sidebars’);
?>

 

Fuentes de referencia:

http://codex.wordpress.org/es:Escribiendo_un_Plugin
https://codex.wordpress.org/Plugin_API/Action_Reference
http://www.codigonexo.com/blog/wordpress-programadores/crear-sidebars-en-wordpress/
http://www.domestika.org/es/forums/6-programacion-servidor/topics/94200-como-crear-tu-propio-sidebar-personalizado-en-wordpress
http://joanartes.com/blog/sidebar-wordpress/
https://wordpress.org/plugins/multiple-sidebars/installation/ — Plugin para crear sidebars desde el administrador de WordPress