Handleiding voor het maken van uw eigen WordPress Editor-knoppen

Hoogstwaarschijnlijk weet u dat WordPress is gebundeld met de HTML WYSIWYG-editor, TinyMCE. De verscheidenheid aan functies en de mogelijkheid om door plug-ins te worden uitgebreid, maken dit de meest gebruikte WYSIWYG-editor ter wereld. WordPress maakt echter geen gebruik van alle functies. WordPress past het aan en bewaart alleen onderdelen die echt nuttig zijn voor gebruikers, zodat de gebruikersinterface niet kapot gaat. Dat betekent ook dat sommige functies, zoals knoppen, voor gebruikers zijn verborgen. U kunt de verborgen MCE-knoppen volledig inschakelen. Meestal zijn ze dat stylesheet, sub, sup toetsen. Als zelfs de verborgenen nog steeds niet voldoen aan je behoeften, dan moet je een TinyMCE-plug-in maken om je eigen te kunnen toevoegen. In deze tutorial zal ik je door de basis van het toevoegen van je WordPress Editor-knoppen leiden door een TinyMCE-plug-in te maken.


Voor we beginnen

Zoals eerder vermeld, zullen we een nieuwe TinyMCE-plug-in maken, wiens taak het is om de nieuwe knoppen toe te voegen die we willen. Dus welke knoppen gaan we toevoegen? We zullen proberen om twee eenvoudige knoppen toe te voegen: Dropcap en recente berichten, waarbij de eerste je de mogelijkheid geeft om een ​​geselecteerde letter om te zetten in een letter met een drop-cap, en de laatste geeft recente berichten weer. De code genereert de onderstaande knoppen.

Laten we een nieuwe map maken met de naam wptuts-editor-knoppen (natuurlijk kunt u dit naar iets anders wijzigen als u dat wilt) in uw themamap (ik gebruik TwentyTwelve). Ga door met het maken van twee nieuwe bestanden, wptuts.php die op maat gemaakte PHP roept, en de andere met de naam wptuts-plugin.js waar de JavaScript-codefragmenten zullen worden gevonden. Open tot slot je thema's functions.php bestand en voeg de nieuw gecreëerde toe wptuts.php bestand erin. Let op, vergeet niet om het pad precies te definiëren:

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

Dan moeten we een code voor die twee knoppen voorbereiden:

  • Dropcap - De ideale manier om een ​​letter in een drop-cap te maken, is door de geselecteerde letter van de gebruiker eenvoudig in een vooraf gedefinieerde HTML-spanclass te plaatsen, die deze letter als een drop-dop ziet. De CSS-code van de hieronder getoonde klasse voegt deze toe aan je thema's style.css het dossier:
     / * Voeg deze code toe in style.css * / .dropcap float: left; lettertypegrootte: 80px; opvulling rechts: 7px; regelhoogte: 72 px; 
  • recente berichten - We zullen een shortcode maken die een lijst met recente berichten aan de pagina zal toevoegen, open de wptuts.php bestand en voeg de volgende code toe:
     add_shortcode ('recente berichten', 'wptuts_recent_posts'); functie wptuts_recent_posts ($ atts) extract (shortcode_atts (array ('numbers' => '5',), $ atts)); $ rposts = nieuw WP_Query (array ('posts_per_page' => $ numbers, 'orderby' => 'date')); if ($ rposts-> have_posts ()) $ html = '

    recente berichten

      '; 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 (); return $ html;

    We gaan ervan uit dat wanneer gebruikers op de. Klikken recente berichten knop, zal de browser een dialoogvenster openen waarin gevraagd wordt naar het aantal berichten dat ze willen weergeven. Na het hebben van dat nummer vult de redacteur het als een argument in de bovenstaande shortcode. Als we bijvoorbeeld zeven recente berichten willen weergeven, wordt de shortcode als volgt gegenereerd:

     [recente berichten nummers = "7" /]

Een nieuwe TinyMCE-invoegtoepassing registreren

Ervan uitgaande dat we de nieuwe plug-in al hadden, moeten we deze registreren bij WordPress om deze in de TinyMCE-editor te integreren. De code wordt hieronder getoond:

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

De belangrijke filterhaak mce_external_plugins wordt gebruikt om de nieuwe plug-in aan TinyMCE te koppelen. We moeten een plug-in-ID doorgeven (wptuts) en de absolute URL die naar ons verwijst wptuts-plugin.js het dossier. De mce_buttons hook wordt gebruikt om de TinyMCE-editor te vertellen welke knoppen in onze plug-in we willen weergeven. De dropcap en showrecent zijn de ID-waarden van deze knoppen die we willen maken. Onthoud deze waarden, ze zullen later worden gebruikt.


De TinyMCE-plug-in instellen

Over het algemeen denk ik dat de beste manier om iets op een platform uit te breiden of te ontwikkelen, de documentatie voor dat platform is. TinyMCE heeft een eigen wiki die je misschien handig vindt. Door een voorbeeld te volgen van het maken van een TinyMCE-plug-in, hebben we de volgende initialisatiecode:

 (function () tinymce.create ('tinymce.plugins.Wptuts', / ** * Initialiseert de plug-in, deze wordt uitgevoerd nadat de plug-in is gemaakt. * Deze aanroep is gedaan voordat de editor-instantie de initialisatie heeft voltooid dus gebruik de onInit-gebeurtenis * van de editorinstantie om die gebeurtenis te onderscheppen. * * @param tinymce.Editor ed Editorinstantie waarin de plug-in is geïnitialiseerd. * @param string url Absolute URL naar waar de plug-in zich bevindt. * / init: function (ed, url) , / ** * Maakt controle-instanties gebaseerd op de inkomende naam.Deze methode is normaal niet * nodig, omdat de methode addButton van de klasse tinymce.Editor een gemakkelijkere manier is om toe te voegen knoppen * maar soms moet je complexere besturingselementen maken zoals keuzelijsten, gesplitste knoppen, enz. dan kan deze * methode worden gebruikt om deze te maken. * * @param String n Naam van het besturingselement dat moet worden gemaakt. * @param tinymce.ControlManager  cm Besturingsbeheer gebruiken om een ​​nieuw besturingselement te maken. * @return tinymce.ui.Control Nieuw besturingselement inst of null als er geen controle is gemaakt. * / createControl: function (n, cm) return null; , / ** * Retourneert informatie over de plug-in als een naam- / waardearray. * De huidige sleutels zijn longname, auteur, auteur, infourl en versie. * * @return Object Naam / waarde-array met informatie over de plug-in. * / getInfo: function () return longname: 'Wptuts Buttons', auteur: 'Lee', authorurl: 'http://wp.tutsplus.com/author/leepham', infourl: 'http: // wiki. moxiecode.com/index.php/TinyMCE:Plugins/example ', versie: "0.1"; ); // Registreer plugin tinymce.PluginManager.add ('wptuts', tinymce.plugins.Wptuts); ) ();

Vergeet niet om deze code toe te voegen aan de wptuts-plugin.js het dossier. We hebben de opmerkingen over de code voor u achtergelaten om gemakkelijk te begrijpen wat er aan de hand is. De bovenstaande code heeft slechts twee hoofdtaken:

  1. Allereerst een nieuwe TinyMCE-plug-in op een veilige manier definiëren door TinyMCE's te bellen creëren methode. Het gedrag van onze plug-in wordt gedefinieerd in de in het en CreateControl functies. U kunt zien dat de informatie van de plug-in wordt gedeclareerd in de informatie verkrijgen functie ook. Onze plug-in heeft de naam Wptuts en de ID wptuts zoals je kunt zien.
  2. Voeg als laatste gewoon onze nieuwe plug-in toe aan de TinyMCE Plugin Manager.

Knoppen maken

In de in het functie, beginnen we met het maken van onze knoppen. De code als volgt:

 (functie () tinymce.create ('tinymce.plugins.Wptuts', init: function (ed, url) ed.addButton ('dropcap', title: 'DropCap', cmd: 'dropcap', afbeelding: url + '/dropcap.jpg'); ed.addButton ('showrecent', title: 'Voeg recente berichten shortcode toe', cmd: 'showrecent', image: url + '/recent.jpg');, // ... Verborgen code); // Registreer plugin tinymce.PluginManager.add ('wptuts', tinymce.plugins.Wptuts);) ();

Door de addButton methode van de ed object, vertellen we de huidige editor dat we al deze knoppen willen maken. Deze methode accepteert twee argumenten:

  • De eerste is de ID van de knop. In het vorige gedeelte hebben we het genoemd. Het moet hetzelfde zijn als degene die we eerder hebben gedefinieerd. Anders zal het niet goed werken.
  • De tweede is het object met informatie over de knop, zoals:
    • De titel van de knop
    • Het belangrijkste: de taak die de knop zal uitvoeren. Bekijk de cmd eigendom, het heeft de waarde van showrecent. Dat is het ID van het commando dat elke keer dat het wordt aangeroepen wordt uitgevoerd, we zullen binnenkort in detail treden
    • Het beeld van de knop. Merk op dat de URL-parameter de URL van de absolute directory bevat waarin onze plug-in zich bevindt, dit maakt het gemakkelijker om naar de gewenste afbeelding te verwijzen. U moet dus uw afbeelding in de map van de plug-in plaatsen en ervoor zorgen dat de naam ervan precies op de beeldwaarde.

Controleer nu de WordPress-editor en we zullen onze knoppen zien verschijnen. Ze doen echter nu niets.


Onze knoppen kwamen tevoorschijn.

Knoppenopdrachten toevoegen

We hebben de naam gedefinieerd van de commando's die onze knoppen zullen uitvoeren, maar hebben nog niet gedefinieerd wat ze daadwerkelijk zullen uitvoeren. In deze stap zullen we de dingen instellen die onze knoppen zullen doen. Binnen in de in het functie, ga verder met het toevoegen van deze code zoals getoond:

 (functie () tinymce.create ('tinymce.plugins.Wptuts', init: function (ed, url) ed.addButton ('dropcap', title: 'DropCap', cmd: 'dropcap', afbeelding: url + '/dropcap.jpg'); ed.addButton ('showrecent', title: 'Voeg recente berichten toe shortcode', 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 ("Hoeveel berichten wilt u weergeven?"), shortcode; if (number! == null) number = parseInt (number); if (number > 0 && nummer <= 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 ); )();

Nu de ed.addCommand methode zal ons helpen om een ​​nieuwe opdracht toe te voegen. U moet de ID van de opdracht en de callback-functie doorgeven die zal worden uitgevoerd als deze is aangeroepen door de ed.execCommand methode. Let daar op ed vertegenwoordigt de tinyMCE.activeEditor voorwerp. Laten we eens kijken naar de callback-functies:

  • In de dropcap opdracht, de wens die we willen is wanneer een gebruiker een letter selecteert en op de knop klikt DropCap knop, de letter zal dan worden omgezet in de vorm van een drop-cap. Hoe krijgen we die brief? Nou ja, de ed.selection.getContent methode zal dat voor ons doen. Vervolgens, als we eenmaal die brief hebben gekregen, wikkelen we hem gewoon in een span element. Vergeet niet om de klaswaarde van dit element in te stellen dropcap dat we eerder hebben gedefinieerd, toch? Ten slotte hebben we de volledige tekst die moet worden ingevoegd in de editor. TinyMCE heeft een standaardopdracht met de naam mceInsertContent die wordt gebruikt om specifieke inhoud in de editor in te voegen, hoe deze te gebruiken is hierboven weergegeven. De inhoud zal worden doorgegeven als het derde argument van de mceInsertContent methode.
  • Een soortgelijk iets gebeurt in de showrecent commando zoals in de dropcap opdracht, behalve dat we de geselecteerde inhoud van de gebruiker niet nodig hebben. We geven eenvoudigweg een dialoogvenster weer waarin de gebruiker wordt gevraagd hoeveel berichten hij wil weergeven en vervolgens die getalwaarde invoegen in een toepasselijke shortcode-syntaxis.

Aangepaste CSS voor knoppen registreren (optioneel)

In plaats van pure tekst toe te voegen wanneer de knoppen inhoud in de visuele editor invoegen, kunnen we het veel visueler maken door aangepaste CSS voor onze knoppen te registreren. Het hangt af van welk type inhoudsgegevens en u kunt een geschikte stijl kiezen. Bijvoorbeeld onze DropcapDe stijl kan hetzelfde zijn als degene die op de voorkant wordt weergegeven. Dus je kunt de CSS-code helemaal bovenaan dit bericht plaatsen en het in de. Plaatsen editor-style.css bestand (zie standaard add_editor_style voor detais).

Voor shortcodes hebben ze mogelijk zelf geen HTML-element. Hoe zouden we ze moeten stylen? Nou, deze situatie is veel complexer om het resultaat te bereiken, het is echter niet onmogelijk (je kunt een standaard WordPress-knop zien zoals 'Media toevoegen'). Het kan echter nog steeds lastig zijn, door die shortcode in een HTML-element in te pakken en dat element vervolgens te stylen zoals hierboven. Het is vrij eenvoudig, maar nog niet helemaal perfect. In deze post richten we ons niet op die complexe verwerking.


resultaten

Ten slotte worden de resultaten die we krijgen als volgt weergegeven:


Test de Dropcap-knop.

Dan aan de voorkant:


Dropcap-brief aan de voorkant.

En de knop met recente berichten werkt ook goed:


De knop 'Recente berichten' werkte.

Conclusie

Oké, we hebben een oefening behandeld die vrij eenvoudig en gemakkelijk te volgen is. Mogelijk merkt u dat u met de knop Recente berichten een instelling kunt aanpassen (het aantal berichten dat wordt weergegeven). U weet zeker dat we de standaard JavaScript hebben gebruikt, prompt, om dat te bereiken. Wat als je een meer complexe pop-up wilt, met veel instellingen in plaats van slechts één? Nou, in een andere post zullen we dit bespreken en een andere aanpak proberen.

Alle feedback over dit bericht wordt op prijs gesteld. Bedankt voor het lezen en tot later.


Referentie

  • TinyMCE_Custom_Buttons
  • Een TinyMCE-invoegtoepassing maken