_WP_Editors::editor_js()

In this article

Print (output) the TinyMCE configuration and initialization scripts.

Source

public static function editor_js() {
	global $tinymce_version;

	$tmce_on  = ! empty( self::$mce_settings );
	$mce_init = '';
	$qt_init  = '';

	if ( $tmce_on ) {
		foreach ( self::$mce_settings as $editor_id => $init ) {
			$options   = self::_parse_init( $init );
			$mce_init .= "'$editor_id':{$options},";
		}
		$mce_init = '{' . trim( $mce_init, ',' ) . '}';
	} else {
		$mce_init = '{}';
	}

	if ( ! empty( self::$qt_settings ) ) {
		foreach ( self::$qt_settings as $editor_id => $init ) {
			$options  = self::_parse_init( $init );
			$qt_init .= "'$editor_id':{$options},";
		}
		$qt_init = '{' . trim( $qt_init, ',' ) . '}';
	} else {
		$qt_init = '{}';
	}

	$ref = array(
		'plugins'  => implode( ',', self::$plugins ),
		'theme'    => 'modern',
		'language' => self::$mce_locale,
	);

	$suffix  = SCRIPT_DEBUG ? '' : '.min';
	$baseurl = self::get_baseurl();
	$version = 'ver=' . $tinymce_version;

	/**
	 * Fires immediately before the TinyMCE settings are printed.
	 *
	 * @since 3.2.0
	 *
	 * @param array $mce_settings TinyMCE settings array.
	 */
	do_action( 'before_wp_tiny_mce', self::$mce_settings );
	?>

	<script type="text/javascript">
	tinyMCEPreInit = {
		baseURL: "<?php echo $baseurl; ?>",
		suffix: "<?php echo $suffix; ?>",
		<?php

		if ( self::$drag_drop_upload ) {
			echo 'dragDropUpload: true,';
		}

		?>
		mceInit: <?php echo $mce_init; ?>,
		qtInit: <?php echo $qt_init; ?>,
		ref: <?php echo self::_parse_init( $ref ); ?>,
		load_ext: function(url,lang){var sl=tinymce.ScriptLoader;sl.markDone(url+'/langs/'+lang+'.js');sl.markDone(url+'/langs/'+lang+'_dlg.js');}
	};
	</script>
	<?php

	if ( $tmce_on ) {
		self::print_tinymce_scripts();

		if ( self::$ext_plugins ) {
			// Load the old-format English strings to prevent unsightly labels in old style popups.
			echo "<script type='text/javascript' src='{$baseurl}/langs/wp-langs-en.js?$version'></script>\n";
		}
	}

	/**
	 * Fires after tinymce.js is loaded, but before any TinyMCE editor
	 * instances are created.
	 *
	 * @since 3.9.0
	 *
	 * @param array $mce_settings TinyMCE settings array.
	 */
	do_action( 'wp_tiny_mce_init', self::$mce_settings );

	?>
	<script type="text/javascript">
	<?php

	if ( self::$ext_plugins ) {
		echo self::$ext_plugins . "\n";
	}

	if ( ! is_admin() ) {
		echo 'var ajaxurl = "' . admin_url( 'admin-ajax.php', 'relative' ) . '";';
	}

	?>

	( function() {
		var initialized = [];
		var initialize  = function() {
			var init, id, inPostbox, $wrap;
			var readyState = document.readyState;

			if ( readyState !== 'complete' && readyState !== 'interactive' ) {
				return;
			}

			for ( id in tinyMCEPreInit.mceInit ) {
				if ( initialized.indexOf( id ) > -1 ) {
					continue;
				}

				init      = tinyMCEPreInit.mceInit[id];
				$wrap     = tinymce.$( '#wp-' + id + '-wrap' );
				inPostbox = $wrap.parents( '.postbox' ).length > 0;

				if (
					! init.wp_skip_init &&
					( $wrap.hasClass( 'tmce-active' ) || ! tinyMCEPreInit.qtInit.hasOwnProperty( id ) ) &&
					( readyState === 'complete' || ( ! inPostbox && readyState === 'interactive' ) )
				) {
					tinymce.init( init );
					initialized.push( id );

					if ( ! window.wpActiveEditor ) {
						window.wpActiveEditor = id;
					}
				}
			}
		}

		if ( typeof tinymce !== 'undefined' ) {
			if ( tinymce.Env.ie && tinymce.Env.ie < 11 ) {
				tinymce.$( '.wp-editor-wrap ' ).removeClass( 'tmce-active' ).addClass( 'html-active' );
			} else {
				if ( document.readyState === 'complete' ) {
					initialize();
				} else {
					document.addEventListener( 'readystatechange', initialize );
				}
			}
		}

		if ( typeof quicktags !== 'undefined' ) {
			for ( id in tinyMCEPreInit.qtInit ) {
				quicktags( tinyMCEPreInit.qtInit[id] );

				if ( ! window.wpActiveEditor ) {
					window.wpActiveEditor = id;
				}
			}
		}
	}());
	</script>
	<?php

	if ( in_array( 'wplink', self::$plugins, true ) || in_array( 'link', self::$qt_buttons, true ) ) {
		self::wp_link_dialog();
	}

	/**
	 * Fires after any core TinyMCE editor instances are created.
	 *
	 * @since 3.2.0
	 *
	 * @param array $mce_settings TinyMCE settings array.
	 */
	do_action( 'after_wp_tiny_mce', self::$mce_settings );
}

Hooks

do_action( ‘after_wp_tiny_mce’, array $mce_settings )

Fires after any core TinyMCE editor instances are created.

do_action( ‘before_wp_tiny_mce’, array $mce_settings )

Fires immediately before the TinyMCE settings are printed.

do_action( ‘wp_tiny_mce_init’, array $mce_settings )

Fires after tinymce.js is loaded, but before any TinyMCE editor instances are created.

Changelog

VersionDescription
3.3.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.