Cómo crear un complemento de complementos empaquetados para WordPress

Mantener la funcionalidad separada de la presentación es una de las mejores prácticas de desarrollo de temas de WordPress. En esta publicación, aprenderá a hacer precisamente eso, brindando a sus usuarios un complemento empaquetado único para sus temas.

Lógica de desarrollo del tema

Hemos estado vendiendo temas de WordPress en ThemeForest durante más de cuatro años, y durante este tiempo hemos aprendido muchas cosas que nos han ayudado a tener éxito en el mercado. Uno de los aspectos clave del desarrollo exitoso de un tema es la "lógica correcta de desarrollo del tema". 

El beneficio clave de separar la lógica de desarrollo es la velocidad de producción: cuanto más rápido pueda crear temas de calidad, más ingresos podrá generar. Mantener la funcionalidad en un complemento separado también es útil cuando se trata de actualizaciones. Imagina que tienes diez temas en ThemeForest y deseas agregar una nueva funcionalidad como actualización. Tener toda su funcionalidad en un solo complemento significa que solo necesita actualizarlo una vez en general, de lo contrario, incluso una pequeña actualización se vuelve lenta y potencialmente dolorosa.

Entonces, si desea crear temas poderosos y ganar más dinero al hacerlo, respete el plugin y el sistema de temas de WordPress..

Tipos de funcionalidad

¿Qué tipo de funcionalidad puede contener un tema premium? ¿Qué tipo de cosas deberíamos estar introduciendo en un complemento separado? Aquí hay una lista de componentes clave que normalmente mantenemos separados de los archivos de temas:

  • Panel de opciones de tema
  • Página / Publicar campos personalizados extendidos
  • Widgets personalizados
  • Códigos cortos personalizados
  • Tipos de correos personalizados
  • Funciones adicionales personalizadas

En esta publicación no detallaremos cómo crear los componentes en sí mismos, pero explicaremos cómo empaquetarlos en un complemento de complementos.. 

Vamos a empezar

Ir a tu wp-contenido> plugins y cree una carpeta vacía con el nombre de su complemento empaquetado. Le recomendamos que utilice un nombre que se explica por sí mismo. Por ejemplo, nuestro complemento de complementos se llama "ninzio-addons" (Ninzio es el nombre de nuestra empresa). 

Importante: no use un guión bajo en el nombre de la carpeta! Use un guión si es necesario.

A continuación, en esa carpeta de complementos cree un archivo php con el mismo nombre que su carpeta. En nuestro ejemplo, eso sería "ninzio-addons.php". Una vez más, no hay guiones por favor. Abra ese archivo y agregue el siguiente comentario del encabezado de DocBlock:

/ ** * Nombre del complemento: Su nombre del complemento * URI del complemento: url del complemento * Dominio de texto: dominio de texto * Ruta del dominio: / languages ​​/ * Descripción: Breve descripción del complemento * Autor: Nombre del autor * Versión: 1.0.0 * Autor URI: autor uri * /

Examinemos los detalles que agregamos aquí: 

  • Nombre del complemento: este debe ser corto y descriptivo.. 
  • URI de plugin: puedes pegar la dirección de tu sitio web aquí. 
  • Dominio de texto: este es un parámetro muy importante. Deberías nombrarlo de la misma manera que tu carpeta de plugins y el archivo principal. Con el dominio de texto, usted y sus usuarios pueden traducir cadenas de complementos. Más adelante veremos cómo traducir un complemento de complementos empaquetados (encontramos que esto es muy importante para nuestros clientes). 
  • Ruta de dominio: este parámetro también es muy importante para la traducción de complementos. La ruta del dominio es relativa a la carpeta del archivo de idioma. Vaya a la carpeta de complementos de sus complementos y cree una carpeta vacía con el nombre "idiomas". Por ahora déjalo vacío; Más tarde crearemos el archivo de idioma.. 
  • Todos los demás parámetros "Autor", "Versión", "Autor URI" son razonablemente autoexplicativos.

Ahora, después de haber creado nuestra carpeta de complementos de complementos y el archivo principal es hora de configurar nuestro complemento.

Configuración

En el archivo del complemento principal, después del comentario del encabezado, pegue este fragmento de código:

if (! defined ('ABSPATH')) exit; // Salir si se accede directamente

Esto es por razones de seguridad; Bloquea el acceso directo al archivo del plugin..

Justo después de eso, agrega este código:

function your_addons_load_plugin_textdomain () load_plugin_textdomain ('ninzio-addons', false, dirname (plugin_basename (__ FILE__)). '/ languages ​​/');  add_action ('plugins_loaded', 'your_addons_load_plugin_textdomain');

Aquí cargamos nuestro complemento textdomain-asegúrese de que el nombre de la función es correcto. Nuestra recomendación para las funciones de nombres es utilizar nombres autodescriptivos con un prefijo de su complemento. Por ejemplo ninzio_addons. Y como esta es una función php, podemos usar guiones bajos en lugar de guiones. 

Asegúrese de ser exacto al copiar o escribir la función load_plugin_textdomain. Para el parámetro de dominio ingrese el dominio de texto exacto que definimos anteriormente. Y para el parámetro de ruta relativa del complemento, ingrese la ruta a la carpeta de idiomas que creamos anteriormente.

Ruta del directorio del plugin

Ahora definamos nuestra ruta de directorio de plugin; añade este código:

define ('your_addons', plugin_dir_path (__FILE__));

Aquí estamos usando sus_adones como ruta del directorio del plugin. Hasta ahora tan bueno; hemos creado nuestro complemento, ahora es el momento de llenarlo con una funcionalidad personalizada.

Panel de opciones de tema

No usaremos este paso para cubrir cómo crear un panel de opciones para un tema; puede crear uno personalizado o hacer lo que nosotros hacemos; Utilice un marco de panel de opciones de tema estándar. Si no está familiarizado con los marcos de paneles de opciones, le recomendamos leer los artículos de Bonang Salemane sobre la integración del tema de Redux Framework:

  • Comenzando con Redux Framework: presentándolo e integrándolo en su tema

    La mayoría de los temas de WordPress bien diseñados permiten a los administradores del sitio modificar ciertos aspectos del tema a través de una página de opciones. El proceso de crear una página de opciones ...
    Bonang Salemane
    WordPress

Para agregar un panel de opciones de tema a sus complementos, copie la carpeta del panel de opciones, en su totalidad, en la carpeta de complementos de complementos. Ahora necesitamos requerir varios archivos para activarlo:

if (! class_exists ('ReduxFramework') && file_exists (your_addons. '/optionpanel/framework.php')) require_once ('optionpanel / framework.php');  if (! isset ($ redux_demo) && file_exists (your_addons. '/optionpanel/config.php')) require_once ('optionpanel / config.php'); 

En este fragmento de código requerimos los dos archivos principales de reduxframework: el archivo framework.php que administra la funcionalidad del panel de opciones, y el archivo config, php que es responsable de las configuraciones del panel de opciones. Los archivos de nuestro panel de opciones se encuentran en una carpeta del "panel de opciones" que se encuentra dentro de la carpeta del complemento ninzio-addons. Hecho.

Funciones personalizadas

Es hora de que incluyamos algunas funciones personalizadas. Cree un archivo dentro de la carpeta de complementos de los complementos y asígnele el nombre "addons-functons.php". Pon todas tus funciones personalizadas dentro de este archivo. 

Una cosa a tener en cuenta es que utiliza las convenciones de nomenclatura de funciones adecuadas. Utilice nombres de funciones descriptivas con un prefijo único. Por ejemplo:

función your_addons_profile_social_links () …

Inmediatamente después de los archivos del marco temático, requiera su archivo de funciones personalizadas:

require_once ('includes / addons-functions.php');

Widgets personalizados

Y ahora, incluye algunos widgets personalizados. Cree una carpeta con el nombre de "widgets" dentro de la carpeta de complementos de sus complementos, coloque todos sus archivos de widgets personalizados dentro de esa carpeta. La nomenclatura de archivos de widgets personalizados no es crítica aquí, pero se recomienda que use prefijos y guiones, no guiones bajos.

Por ejemplo, nuestro archivo de widget de Twitter personalizado se llama "ninzio-recent-tweets.php". Del mismo modo, nuestro widget de Mailchimp se llama "ninzio-mailchimp.php". Incluyámoslos así:

require_once ('widgets / ninzio-recent-tweets.php'); require_once ('widgets / ninzio-mailchimp.php');

Nuevamente, no cubriremos el proceso real de creación de widgets personalizados; Para eso, mira el post de Bonang Salemane:

  • Creando tus propios widgets usando varias API de WordPress: Introducción

    Los widgets son una forma ingeniosa de darles a los propietarios de sitios algún control sobre el aspecto (y, a veces, la funcionalidad) de sus sitios de WordPress. En esta serie, vamos ...
    Bonang Salemane
    Widgets de WordPress

Tipos de correos personalizados y taxonomías

Si desea agregar una cartera, o eventos, o cualquier cosa que sea similar a las publicaciones regulares de WordPress pero necesita estar separado del tema, debe usar tipos de publicaciones personalizadas. Todos nuestros temas tienen tipos de mensajes personalizados incluidos. La creación de tipos de publicaciones personalizados puede ser compleja, por lo que, una vez más, queda fuera del alcance de este tutorial, pero te recomiendo que leas los de Tom McFarlin:

  • Consejo rápido: Tipos de correos, taxonomías y enlaces permanentes

    Los tipos de correos personalizados y las taxonomías son dos características poderosas de WordPress. Desafortunadamente, pueden tener una tendencia a causar problemas si los desarrolladores no lo hacen ...
    Tom McFarlin
    WordPress

Para los tipos de publicaciones personalizadas, debe crear una carpeta separada dentro de su complemento de complementos, por ejemplo, "ninzio-projects". Y dentro de esa carpeta coloque todos los archivos relacionados con sus tipos de publicaciones personalizadas. Los archivos más importantes aquí son los archivos principales que crean los tipos de publicación personalizados, el archivo de publicación única y el archivo de publicación en bucle / archivo. Asigne un nombre al archivo principal de tipo de publicación personalizado tal como ha nombrado a su carpeta de tipo de publicación personalizada, como "ninzio-projects.php". Coloque su código de tipo de publicación personalizado dentro de ese archivo, luego, para activar su tipo de publicación personalizada necesitará el archivo principal:

require_once ('ninzio-projects / ninzio-projects.php');

Cuando separa una funcionalidad como esta, siempre debe considerar a sus clientes, más precisamente, cómo pueden extender / reescribir sus archivos de plantilla de tipo de publicación personalizados (archivo y sencillo). Supongamos que nuestro nombre de tipo de mensaje personalizado es "proyectos". El único archivo de tipo de publicación personalizado debe llamarse "single-projects.php" y el archivo de bucle / archivo debe llamarse "archive-projects.php". 

Y si su tipo de publicación personalizada también tiene taxonomías personalizadas, también debe crear un archivo separado para ellas. Llamemos a nuestro archivo de taxonomía "taxonomy-projects.php". Así que ahora tenemos tres archivos:

single-projects.php archive-projects.php taxonomy-projects.php

Vamos a hacerlos reescribibles. Agregue estas tres funciones a su archivo principal de complementos:

function your_addons_projects_single_template ($ single_template) global $ post; if ($ post-> post_type == 'proyectos') if ($ theme_file = Locate_template (array ('single-projects.php'))) $ single_template = $ theme_file;  else $ single_template = your_addons. 'projects / single-projects.php';  devolver $ single_template;  add_filter ("single_template", "your_addons_projects_single_template", 20);


function your_addons_projects_archive_template ($ archive_template) global $ post; if ($ post-> post_type == 'proyectos') if ($ theme_file = Locate_template (array ('archive-projects.php'))) $ archive_template = $ theme_file;  else $ archive_template = sus_adones. 'projects / archive-projects.php';  devolver $ archive_template;  add_filter ("archive_template", "your_addons_projects_archive_template", 20);


function your_addons_projects_taxonomy_template ($ taxonomy_template) if (is_tax ('projects-category')) if ($ theme_file = located_template (array ('taxonomy-projects.php'))) $ taxonomy_template = $ theme_file;  else $ taxonomy_template = your_addons. 'proyectos / taxonomía-proyectos.php';  devolver $ taxonomy_template;  add_filter ("taxonomy_template", "your_addons_projects_taxonomy_template", 20);

Cambie el nombre de estas funciones para tener su prefijo único. La lógica principal aquí es cargar los archivos de plantilla del tipo de publicación personalizada después de verificar si una copia está presente en la carpeta del tema. Cuando su cliente copia la plantilla de tipo de publicación personalizada al tema y la extiende o sobrescribe, el complemento de sus complementos cargará la versión de su cliente del archivo de tipo de publicación personalizado. Entonces, en esta situación, sus archivos principales dentro del complemento de complementos no se modifican, son simplemente extendido por tu cliente Cualquier actualización futura de su complemento de complementos no eliminará las modificaciones personalizadas de su cliente.

Scripts personalizados, estilos y códigos cortos

Para los estilos y secuencias de comandos personalizados, le recomendamos crear carpetas separadas y poner en cola los archivos como lo haría en el archivo "functions.php" de su tema.

Si planea agregar códigos cortos personalizados, deberá crear e incluir su archivo de códigos cortos dentro de la carpeta de complementos. Cree una carpeta con el nombre "shortcodes" y dentro de esa carpeta cree el archivo "yourprefix-shortcodes.php" (en nuestro caso: "ninzio-shortcodes.php"). En el archivo “-shortcodes.php” debes poner todos tus códigos de códigos cortos personalizados. 

Como ya se habrá reunido, no usaremos este tutorial para cubrir el proceso de creación de códigos cortos personalizados, pero le recomiendo que lea el tutorial de Siddharth:

  • WordPress Shortcodes: el camino correcto

    Una de las razones principales por las que WordPress es la plataforma de CMS más popular disponible es el gran nivel de personalización que ofrece. Hoy,…
    Siddharth
    Desarrollo del tema

Vamos a incluir nuestro archivo de códigos cortos personalizados:

require_once ('shortcodes / ninzio-shortcodes.php');

Idiomas

Casi hemos terminado con el complemento de complementos. Una vez que haya probado todas sus funciones personalizadas, es hora de crear el archivo de idioma para hacer que su complemento sea traducible. 

Ve a la Addons plugin folder> languages. Utilice el software PoEdit (PoEdit es una aplicación gratuita, disponible para Mac, Windows y Linux) para generar el archivo de idioma. Nuevamente, sea muy preciso con el nombre del archivo; los archivos resultantes deben nombrarse exactamente como la carpeta de complementos de los complementos. Por ejemplo, nuestro nombre de complemento es "ninzio-addons", el archivo de idioma debe ser "ninzio-addons.pot". Este es el archivo de idioma principal que contiene todas las cadenas dentro de su dominio de texto. Desde este archivo puedes crear otros archivos de idioma.. 

Para traducir el archivo de idioma de tu complemento:

  1. Poner en marcha Poedit.
  2. En poedit ir a Archivo> Nuevo desde archivo POT / PO ...
  3. Selecciona y abre el archivo pot desde la carpeta de idiomas..
  4. Ingrese su nombre, dirección de correo electrónico, su idioma y país (es decir, francés fr_FR, alemán DE_DE).
  5. Haga clic en el Actualizar Botón en la interfaz de usuario principal de Poedit..
  6. Guarde el archivo, denominado como “filename-xx_XX.po” con “xx_XX” para su idioma y país.
  7. Eso es!

Conclusión

Ahora tu plugin está listo, ¡bien hecho! Hemos retirado todas las funciones necesarias de nuestros archivos de presentación y hemos proporcionado un complemento que podemos actualizar en múltiples temas.. 

Espero que hayas disfrutado siguiéndolo, no olvides que puedes incluir la muestra del complemento de complementos empaquetados en Github y usarlo como punto de partida..