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.
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..
¿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:
En esta publicación no detallaremos cómo crear los componentes en sí mismos, pero explicaremos cómo empaquetarlos en un complemento de complementos..
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í:
Ahora, después de haber creado nuestra carpeta de complementos de complementos y el archivo principal es hora de configurar nuestro complemento.
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.
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.
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:
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.
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');
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:
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:
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.
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:
Vamos a incluir nuestro archivo de códigos cortos personalizados:
require_once ('shortcodes / ninzio-shortcodes.php');
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:
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..