Guía para crear tus propios botones del editor de WordPress

Lo más probable es que sepa que WordPress está incluido con el editor HTML WYSIWYG, TinyMCE. La variedad de características, y la capacidad de extenderse a través de complementos, lo convierten en el editor WYSIWYG más utilizado del mundo. WordPress no hace uso de todas sus características, sin embargo. WordPress lo personaliza y solo conserva las partes que son realmente útiles para los usuarios, evitando alterar la interfaz del usuario. Eso también significa que algunas funciones, como los botones, se han ocultado a los usuarios. Puede habilitar totalmente los botones ocultos de MCE. Tipicamente son hoja de estilo, sub, cenar botones. Si incluso los ocultos aún no satisfacen sus necesidades, debe crear un complemento TinyMCE para agregar el suyo. En este tutorial, lo guiaré a través de los conceptos básicos para agregar los botones de WordPress Editor al crear un complemento TinyMCE.


Antes que empecemos

Como se mencionó anteriormente, crearemos un nuevo complemento de TinyMCE cuya tarea es agregar los nuevos botones que deseamos. Entonces, ¿qué botones vamos a agregar? Intentaremos agregar dos botones simples: Dropcap y Mensajes recientes, en el que el primero te da la posibilidad de convertir una letra seleccionada en una letra mayúscula, y el segundo mostrará publicaciones recientes. El código genera estos botones que se muestran a continuación..

Vamos a crear una nueva carpeta llamada wptuts-editor-buttons (por supuesto, puedes cambiarlo a otra cosa si lo deseas) en tu directorio de temas (estoy usando TwentyTwelve). Continuar creando dos nuevos archivos., wptuts.php que invoca PHP personalizado, y el otro denominado wptuts-plugin.js donde se ubicarán los fragmentos de código JavaScript. Finalmente, abre tus temas funciones.php archivo e incluir el recién creado wptuts.php archivo en el mismo. Tenga en cuenta, recuerde que debe definir su ruta exactamente:

 require ('wptuts-editor-buttons / wptuts.php');

Entonces necesitamos preparar un código para esos dos botones:

  • Dropcap - La forma ideal de convertir una letra en mayúsculas es simplemente envolver la letra seleccionada por el usuario dentro de una clase de intervalo de HTML predefinida que estiliza esa letra para que se vea como mayúsculas. El código CSS de la clase que se muestra a continuación, solo lo agrega a su tema style.css expediente:
     / * Agrega este código en style.css * / .dropcap float: left; tamaño de fuente: 80px; derecho de relleno: 7px; línea de altura: 72px; 
  • Mensajes recientes - Haremos un código corto que agregará una lista de publicaciones recientes en la página, abra el wptuts.php Archivo y añadir el siguiente código:
     add_shortcode ('posts recientes', 'wptuts_recent_posts'); función wptuts_recent_posts ($ atts) extract (shortcode_atts (array ('numbers' => '5',), $ atts)); $ rposts = new WP_Query (array ('posts_per_page' => $ números, 'orderby' => 'fecha')); if ($ rposts-> have_posts ()) $ html = '

    Mensajes recientes

      '; while ($ rposts-> have_posts ()) $ rposts-> the_post (); $ html. = sprintf ('
    • % s
    • ', get_permalink ($ rposts-> post-> ID), get_the_title (), get_the_title ()); $ html. = '
    '; wp_reset_query (); devuelve $ html;

    Suponemos que cuando los usuarios hacen clic en el Mensajes recientes botón, el navegador abrirá un cuadro de diálogo que les pedirá la cantidad de publicaciones que quieren mostrar. Después de tener ese número, el editor lo llenará como un argumento en el código abreviado anterior. Por ejemplo, si queremos mostrar siete publicaciones recientes, el código abreviado se genera de la siguiente manera:

     [Números de mensajes recientes = "7" /]

Registro de un nuevo complemento de TinyMCE

Suponiendo que ya teníamos el nuevo complemento, entonces debemos registrarlo con WordPress para integrarlo en el editor TinyMCE. El código se muestra a continuación:

 add_action ('init', 'wptuts_buttons'); función wptuts_buttons () add_filter ("mce_external_plugins", "wptuts_add_buttons"); add_filter ('mce_buttons', 'wptuts_register_buttons');  función wptuts_add_buttons ($ plugin_array) $ plugin_array ['wptuts'] = get_template_directory_uri (). '/wptuts-editor-buttons/wptuts-plugin.js'; devuelve $ plugin_array;  función wptuts_register_buttons ($ buttons) array_push ($ buttons, 'dropcap', 'showrecent'); // dropcap ',' recentposts return $ buttons; 

El importante gancho de filtro. mce_external_plugins Se utiliza para conectar el nuevo complemento a TinyMCE. Necesitamos pasar un ID de plugin (Wptuts) y la URL absoluta que apunta a nuestra wptuts-plugin.js expediente. los mce_buttons hook se utiliza para indicar al editor TinyMCE qué botones de nuestro complemento queremos mostrar. los dropcap y showrecent son los valores de ID de estos botones que planeamos crear. Ten en cuenta estos valores, serán utilizados más adelante..


Configurando el complemento TinyMCE

En general, creo que la mejor manera de ampliar o desarrollar algo en una plataforma es consultar la documentación de esa plataforma. TinyMCE tiene su propio wiki que puede ser útil. Siguiendo un ejemplo de cómo crear un complemento TinyMCE, tenemos el siguiente código de inicialización:

 (function () tinymce.create ('tinymce.plugins.Wptuts', / ** * Inicializa el complemento, esto se ejecutará después de que se haya creado el complemento. * Esta llamada se realiza antes de que la instancia del editor haya finalizado su inicialización así que use el evento onInit * de la instancia del editor para interceptar ese evento. * * @param tinymce.Editor ed instancia del editor en la que se inicializa el complemento. * @param string url URL absoluta donde se encuentra el complemento. * / init: function (ed, url) , / ** * Crea instancias de control basadas en el nombre que ingresa. Este método normalmente no es * necesario ya que el método addButton de la clase tinymce.Editor es una forma más fácil de agregar botones * pero a veces necesita crear controles más complejos como cuadros de lista, botones divididos, etc., entonces este método * se puede usar para crearlos. * * @param String n Nombre del control para crear. * @param tinymce.ControlManager  cm Control Manager para usar inorder para crear nuevo control. * @return tinymce.ui.Control Nuevo control inst Ance o nulo si no se creó ningún control. * / createControl: function (n, cm) return null; , / ** * Devuelve información sobre el complemento como una matriz de nombre / valor. * Las claves actuales son longname, author, authorurl, infourl y version. * * @return Objeto Arreglo de nombre / valor que contiene información sobre el complemento. * / getInfo: function () return longname: 'Wptuts Buttons', autor: 'Lee', authorurl: 'http://wp.tutsplus.com/author/leepham', infourl: 'http: // wiki. moxiecode.com/index.php/TinyMCE:Plugins/example ', versión: "0.1"; ); // Registrar el complemento tinymce.PluginManager.add ('wptuts', tinymce.plugins.Wptuts); ) ();

Recuerde agregar este código en el wptuts-plugin.js expediente. Hemos dejado los comentarios del código para que entiendas fácilmente lo que está pasando. El código anterior solo hace dos tareas principales:

  1. Primero, definir un nuevo complemento de TinyMCE de forma segura llamando a TinyMCE crear método. El comportamiento de nuestro plugin se definirá en la en eso y crearControl funciones Puedes ver que la información del plugin está declarada en el obtener información función también Nuestro plugin tendrá el nombre Wptuts y la identificación Wptuts como puedes ver.
  2. Por último, simplemente agregue nuestro nuevo complemento en el Administrador de complementos de TinyMCE.

Creando Botones

En el en eso Función, empezamos a crear nuestros botones. El código visto de la siguiente manera:

 (function () tinymce.create ('tinymce.plugins.Wptuts', init: function (ed, url) ed.addButton ('dropcap', title: 'DropCap', cmd: 'dropcap', imagen: url + '/dropcap.jpg'); ed.addButton ('showrecent', title: 'Agregar el código corto de las publicaciones recientes', cmd: 'showrecent', image: url + '/recent.jpg');, // ... Código oculto); // Registrar el complemento tinymce.PluginManager.add ('wptuts', tinymce.plugins.Wptuts);) ();

Utilizando el addButton método de la ed objeto, le decimos al editor actual que queremos crear todos estos botones. Este método acepta dos argumentos:

  • El primero es la identificación del botón. En la sección anterior, lo mencionamos. Debe ser el mismo que definimos anteriormente. De lo contrario, no funcionará correctamente..
  • El segundo es el objeto que contiene la información del botón, como:
    • El título del botón.
    • Lo más importante: la tarea que hará el botón. Echa un vistazo a la cmd propiedad, tiene el valor de showrecent. Esa es la ID del comando que se ejecuta cada vez que se llama, en breve entraremos en detalle
    • La imagen del botón. Tenga en cuenta que el parámetro de URL contiene la URL del directorio absoluto en el que se encuentra nuestro complemento, lo que facilita la referencia de la imagen que desea. Por lo tanto, debe colocar su imagen en la carpeta del complemento y asegurarse de que su nombre esté configurado con precisión imagenel valor de.

Ahora, revisa el editor de WordPress y veremos que nuestros botones aparecen. Sin embargo, no hacen nada en este momento..


Nuestros botones aparecieron.

Agregando Comandos De Botones

Hemos definido el nombre de los comandos que ejecutarán nuestros botones, pero aún no hemos definido qué ejecutarán realmente. En este paso, configuraremos las cosas que harán nuestros botones. Dentro de en eso función, continúe agregando este código como se muestra:

 (function () tinymce.create ('tinymce.plugins.Wptuts', init: function (ed, url) ed.addButton ('dropcap', title: 'DropCap', cmd: 'dropcap', imagen: url + '/dropcap.jpg'); ed.addButton ('showrecent', title: 'Agregar el código corto de las publicaciones recientes', cmd: 'showrecent', image: url + '/recent.jpg'); ed. addCommand ('dropcap', function () var selected_text = ed.selection.getContent (); var return_text = "; return_text = ''+ selected_text +''; ed.execCommand ('mceInsertContent', 0, return_text); ); ed.addCommand ('showrecent', function () var number = prompt ("¿Cuántas publicaciones desea mostrar?"), shortcode; if (número! == nulo) number = parseInt (número); if (número > 0 && número <= 20)  shortcode = '[recent-post number="' + number + '"/]'; ed.execCommand('mceInsertContent', 0, shortcode);  else  alert("The number value is invalid. It should be from 0 to 20.");   ); , //… Hidden code ); // Register plugin tinymce.PluginManager.add( 'wptuts', tinymce.plugins.Wptuts ); )();

Ahora el ed.addCommand El método nos ayudará a agregar un nuevo comando. Debe pasar el ID del comando y la función de devolución de llamada que se ejecutará si fue llamado por el ed.execCommand método. Tenga en cuenta que ed representa el tinyMCE.activeEditor objeto. Echemos un vistazo a las funciones de devolución de llamada:

  • En el dropcap comando, el deseo que queremos es cuando un usuario selecciona una letra y hace clic en el DropCap botón, la letra se transformará en forma de casquillo. Entonces, ¿cómo conseguimos esa carta? Bueno el ed.selection.getContent El método lo hará por nosotros. A continuación, una vez que hayamos recibido esa carta, simplemente la envolvemos dentro de un lapso elemento. Recuerde establecer el valor de clase de este elemento en dropcap que hemos definido antes, ¿verdad? Finalmente, tenemos el texto completo que se debe insertar nuevamente en el editor. TinyMCE tiene un comando predeterminado con el nombre mceInsertContent que se usa para insertar contenido específico en el editor, cómo usarlo se muestra arriba. El contenido será pasado como el tercer argumento de la mceInsertContent método.
  • Algo similar ocurre en el showrecent comando como en el dropcap comando, excepto que no necesitamos obtener el contenido seleccionado del usuario. Simplemente mostramos un cuadro de diálogo que le pregunta al usuario cuántas publicaciones desean mostrar, luego insertamos ese valor numérico en una sintaxis de código corto apropiada.

Registro CSS personalizado para botones (opcionalmente)

En lugar de agregar texto puro cuando los botones insertan el contenido en el editor visual, podemos hacerlo mucho más visual al registrar CSS personalizado para nuestros botones. Depende de qué tipo de datos de contenido, y puede elegir un estilo apropiado. Por ejemplo, nuestro DropcapEl estilo de 's puede tener el mismo que el que se muestra en la parte frontal. Así que puedes tomar su código CSS en la parte superior de esta publicación, luego colocarlo en el editor-style.css archivo (por defecto, vea add_editor_style para detais).

Para los códigos cortos, es posible que no tengan un elemento HTML. ¿Cómo debemos estilizarlos? Bueno, esta situación es mucho más compleja para lograr el resultado, aunque no es imposible (puedes ver algunos botones de WordPress predeterminados, como 'Agregar medios'). Sin embargo, aún puede ser complicado, envolviendo ese shortcode en un elemento HTML y luego diseñando ese elemento como se muestra arriba. Es bastante simple, aunque no completamente perfecto. En este post, no nos centraremos en ese complejo procesamiento..


Resultados

Finalmente, los resultados que obtenemos se muestran a continuación:


Prueba el botón Dropcap.

Luego, en la parte delantera:


Dropcap letter in front-end.

Y el botón de Publicaciones recientes también funciona:


Botón de publicaciones recientes trabajado.

Conclusión

Bien, cubrimos una práctica que es bastante simple y fácil de seguir. Puede observar que el botón Publicaciones recientes le permite ajustar una configuración (la cantidad de publicaciones que se mostrarán). Ciertamente sabes que usamos el JavaScript predeterminado, rápido, para lograr eso. ¿Qué sucede si desea una ventana emergente más compleja, que tiene muchas configuraciones en lugar de una sola? Bueno, en otro post discutiremos esto e intentaremos otro enfoque..

Cualquier comentario sobre esta publicación será apreciado. Gracias por leer y hasta luego..


Referencia

  • TinyMCE_Custom_Buttons
  • Creando un complemento de TinyMCE