How to Create a WordPress TinyMCE Plugin

If you’re WordPress developer, then sooner or later it’s possible you’ll come throughout customizing or extending the WordPress Visual Editor. For instance, it’s your decision to upload a button to the Visual Editor’s toolbar to permit your consumer to simply insert a textual content field or a name to motion button with out writing any HTML code. In this text, we will be able to display you ways to create a TinyMCE plugin in WordPress.


This educational is meant for complicated customers. If you’re a amateur degree person who simply needs to lengthen visible editor, then please take a look at TinyMCE Advanced plugin or take a have a look at those recommendations on the use of WordPress visible editor.

For this educational, you’re going to want fundamental coding talents, get entry to to a WordPress set up the place you’ll be able to check it out.

It is a dangerous observe to expand plugins on a reside website online. A minor mistake within the code could make your web site inaccessible. But in the event you should do it on a reside web site, then no less than backup WordPress first.

Creating Your First TinyMCE Plugin

We will start by means of developing a WordPress plugin to sign in our tradition TinyMCE toolbar button. When clicked, this button will permit person to upload a hyperlink with a tradition CSS category.

The supply code will likely be supplied in complete on the finish of this text, however till then, let’s create the plugin step by step.

First, you wish to have to create a listing in wp-content/plugins folder of your WordPress set up. Name this folder tinymce-custom-link-class.

From right here, we’ll start including our plugin code.

The Plugin Header

Create a new document within the plugin listing we simply created and identify this document tinymce-custom-link-class.php. Add this code to the document and put it aside.

 * Plugin Name: TinyMCE Custom Link Class
 * Plugin URI:
 * Version: 1.0
 * Author: WPBeginner
 * Author URI:
 * Description: A easy TinyMCE Plugin to upload a tradition hyperlink category within the Visual Editor
 * License: GPL2

This is solely a PHP remark, which tells WordPress the identify of the plugin, in addition to the writer and a description.

In the WordPress admin space, turn on your new plugin by means of going to Plugins > Installed Plugins, after which clicking Activate beside the TinyMCE Custom Link Class plugin:

Installed plugin

Setting Up Our Plugin Class

If two WordPress plugins have purposes with the similar identify, then this might motive an error. We will keep away from this downside by means of having our purposes wrapped in a category.

category TinyMCE_Custom_Link_Class {
	* Constructor. Called when the plugin is initialised.
	serve as __construct() {


$tinymce_custom_link_class = new TinyMCE_Custom_Link_Class;

This creates our PHP category, at the side of a assemble, which is named after we achieve the road $tinymce_custom_link_class = new TinyMCE_Custom_Link_Class;.

Any purposes we upload inside of this category shouldn’t battle with different WordPress plugins.

Start Setting Up Our TinyMCE Plugin

Next, we want to inform TinyMCE that we’d need to upload our tradition button to the Visual Editor‘s toolbar. To do that, we will use WordPress’ movements – particularly, the init motion.

Add the next code inside of your plugin’s __construct() serve as:

if ( is_admin() ) {
	add_action( 'init', array(  $this, 'setup_tinymce_plugin' ) );

This tests if we’re within the WordPress Administration interface. If we’re, then it asks WordPress to run the setup_tinymce_plugin serve as inside of our category when WordPress has completed its preliminary loading regimen.

Next, upload the setup_tinymce_plugin serve as:

* Check if the present person can edit Posts or Pages, and is the use of the Visual Editor
* If so, upload some filters so we will sign in our plugin
serve as setup_tinymce_plugin() {

// Check if the logged in WordPress User can edit Posts or Pages
// If now not, do not sign in our TinyMCE plugin
if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
	        go back;

// Check if the logged in WordPress User has the Visual Editor enabled
// If now not, do not sign in our TinyMCE plugin
if ( get_user_option( 'rich_editing' ) !== 'true' ) {
go back;

// Setup some filters
add_filter( 'mce_external_plugins', array( &$this, 'add_tinymce_plugin' ) );
add_filter( 'mce_buttons', array( &$this, 'add_tinymce_toolbar_button' ) );

This tests if the present logged in WordPress person can edit Posts or Pages. If they may be able to’t, there’s no level in registering our TinyMCE Plugin for that User, as they’ll by no means see the Visual Editor.

We then take a look at if the person is the use of the Visual Editor, as some WordPress customers flip this off by means of Users > Your Profile. Again, if the person isn’t the use of the Visual Editor, we go back (go out) the serve as, as we don’t want to do the rest.

Finally, we upload two WordPress Filters – mce_external_plugins and mce_buttons, to name our purposes which is able to load the specified Javascript document for TinyMCE, and upload a button to the TinyMCE toolbar.

Registering the Javascript File and Button to the Visual Editor

Let’s move forward and upload the add_tinymce_plugin serve as:

* Adds a TinyMCE plugin suitable JS document to the TinyMCE / Visual Editor example
* @param array $plugin_array Array of registered TinyMCE Plugins
* @go back array Modified array of registered TinyMCE Plugins
serve as add_tinymce_plugin( $plugin_array ) {

$plugin_array['custom_link_class'] = plugin_dir_url( __FILE__ ) . 'tinymce-custom-link-class.js';
go back $plugin_array;


This serve as tells TinyMCE that it wishes to load the Javascript information saved within the $plugin_array array. These Javascript information will inform TinyMCE what to do.

We additionally want to upload some code to the add_tinymce_toolbar_button serve as, to inform TinyMCE in regards to the button we’d like to upload to the toolbar:

* Adds a button to the TinyMCE / Visual Editor which the person can click on
* to insert a hyperlink with a tradition CSS category.
* @param array $buttons Array of registered TinyMCE Buttons
* @go back array Modified array of registered TinyMCE Buttons
serve as add_tinymce_toolbar_button( $buttons ) ', 'custom_link_class' );
go back $buttons;

This pushes two pieces onto the array of TinyMCE buttons: a separator (|), and our button’s programmatic identify (custom_link_class).

Save your plugin, after which edit a Page or Post to view the Visual Editor. Chances are, the toolbar isn’t exhibiting at this time:


Don’t concern – if we use our internet browser’s inspector console, we’ll see that a 404 error and spot had been generated by means of TinyMCE, telling us that it could possibly’t to find our Javascript document.


That’s excellent – it way we’ve effectively registered our TinyMCE tradition plugin, and now want to create the Javascript document to inform TinyMCE what to do.

Creating the Javascript Plugin

Create a new document to your wp-content/plugins/tinymce-custom-link-class folder, and identify it tinymce-custom-link-class.js. Add this code to your js document:

(serve as() {
	tinymce.PluginManager.upload( 'custom_link_class', serve as( editor, url ) {

This calls the TinyMCE Plugin Manager category, which we will use to carry out a collection of TinyMCE plugin comparable movements. Specifically, we’re including our plugin to TinyMCE the use of the upload serve as.

This accepts two pieces; the identify of the plugin (custom_link_class) and an nameless serve as.

If you’re aware of the concept that of purposes in coding, an nameless serve as is just a serve as without a identify. For instance, serve as foobar() { ... } is a serve as that shall we name in other places in our code by means of the use of foobar().

With an nameless serve as, we will’t name that serve as in other places in our code – it’s most effective being known as on the level the upload() serve as is invoked.

Save your Javascript document, after which edit a Page or Post to view the Visual Editor. If the whole lot labored, you’ll see the toolbar:


Right now, our button hasn’t been added to that toolbar. That’s as a result of we’ve most effective instructed TinyMCE that we’re a tradition plugin. We now want to inform TinyMCE what to do – this is, upload a button to the toolbar.

Update your Javascript document, changing your current code with the next:

(serve as() {
	tinymce.PluginManager.upload( 'custom_link_class', serve as( editor, url ) {
		// Add Button to Visual Editor Toolbar
		editor.uploadButton('custom_link_class', {
			name: 'Insert Button Link',
			cmd: 'custom_link_class',

Notice our nameless serve as has two arguments. The first is the editor example – that is the TinyMCE Visual Editor. In the similar approach we will name more than a few purposes at the PluginManager, we will additionally name more than a few purposes at the editor. In this example, we’re calling the uploadButton serve as, to upload a button to the toolbar.

Save your Javascript document, and return to your Visual Editor. At a first glance, not anything turns out to have modified. However, in the event you hover your mouse cursor over to the best of the highest row’s rightmost icon, you must see a tooltip seem:


We’ve effectively added a button to the toolbar, however it wishes a picture. Add the next parameter to the uploadButton serve as, beneath the name: line:

symbol: url + '/icon.png',

url is the URL to our plugin. This is at hand if we wish to reference a picture document inside of our plugin folder, as we will append the picture document identify to the URL. In this example, we’ll want a picture known as icon.png in our plugin’s folder. Use the beneath icon:

Reload our Visual Editor, and also you’ll now see your button with the icon:

Defining a Command to Run

Right now, in the event you click on the button, not anything will occur. Let’s upload a command to TinyMCE telling it what to do when our button is clicked.

In our Javascript document, upload the next code beneath the top of the editor.uploadButton phase:

// Add Command when Button Clicked
editor.uploadCommand('custom_link_class', serve as() {
	alert('Button clicked!');

Reload our Visual Editor, click on the button and an alert will seem confirming we simply clicked the button:


Let’s substitute the alert with a steered, asking the person for the hyperlink they would like to wrap across the decided on textual content within the Visual Editor:

// Add Command when Button Clicked
editor.uploadCommand('custom_link_class', serve as() {
	// Check now we have decided on some textual content that we wish to hyperlink
	var textual content = editor.variety.getContent({
		'layout': 'html'
	if ( textual content.period === 0 ) {
		alert( 'Please choose some textual content to hyperlink.' );
		go back;

	// Ask the person to input a URL
	var consequence = steered('Enter the hyperlink');
	if ( !consequence ) {
		// User cancelled - go out
		go back;
	if (consequence.period === 0) {
		// User did not input a URL - go out
		go back;

	// Insert decided on textual content again into editor, wrapping it in an anchor tag
	editor.execCommand('mceReplaceContent', false, '<a category="button" href="' + consequence + '">' + textual content + '</a>');

This block of code plays a few movements.

First, we take a look at if the person decided on some textual content to be related within the Visual Editor. If now not, they’ll see an alert telling them to choose some textual content to hyperlink.


Next, we ask them to input a hyperlink, once more checking in the event that they did. If they cancelled, or didn’t input the rest, we don’t do the rest.


Finally, we run the execCommand serve as at the TinyMCE editor, particularly operating the mceReplaceContent motion. This replaces the chosen textual content with our HTML code, which contains of an anchor hyperlink with category=”button”, the use of the textual content the person decided on.

If the whole lot labored, you’ll see your decided on textual content is now related within the Visual Editor and Text perspectives, with the category set to button:




We’ve effectively created a WordPress plugin which provides a button to the TinyMCE visible editor in WordPress. This educational has additionally coated one of the vital fundamentals of the TinyMCE API and WordPress filters to be had for TinyMCE integrations.

We added code in order that when a person clicks our tradition button, they’re caused to choose some textual content within the Visual Editor, which they may be able to then hyperlink to a URL in their selection. Finally, our plugin then replaces the chosen textual content with a related model that accommodates a tradition CSS category known as button.

We hope this educational helped you find out how to create a WordPress TinyMCE plugin. You might also need to take a look at our information on how to create a site-specific WordPress plugin.

If you really liked this text, then please subscribe to our YouTube Channel for WordPress video tutorials. You too can to find us on Twitter and Facebook.

Recent Articles

Standard Display Drivers for Windows 10 FAQ

Drivers act like a translator between the device they control, and the other programs in your system. Google Translate is not support in your...

Pictures Tutorial How to Reset USB Ports on Windows 10 8 7?

If you did not find it, close the window and update a different driver. Authentic and functional files are kept in a compressed cache...

How to properly update device drivers on Windows 10

Windows Update, Device Manager, and Auto-Update Assistants from device manufacturers. In most cases, these methods will keep your device drivers installed and updated properly....

Injustice: Gods Among Us APK OBB Download Install 1Click Obb Installer for Injustice: Gods Among Us

The traitor will need to be found before they can kill everyone else. You can download this game for your phone or tablet from...

Ohjelmien poistaminen Windowsista

Jos Lutriksesta ei ohjeita löydy tai jokin ohjelma ei suostu käynnistymään, kannattaa ensimmäisenä vilkaista Winen tietokannasta, onko sitä lainkaan mahdollista saada toimimaan. Bugiraportteja,...

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here