O WordPress contém dois editores embutidos que lhe permitem editar os ficheiros dos templates diretamente a partir do seu painel de administração, sendo eles o editor de templates e o editor de plugins. Por defeito, estes editores têm um aspeto e funcionalidades bastante simples e reduzidas, o que por si só torna o trabalho de edição um pouco mais complicado, começando logo pela falta de diferenciação de código, não havendo diferentes cores no mesmo. Neste artigo vamos-lhe mostrar como introduzir a biblioteca CodeMirror nos editores para melhorar não só o seu look como também a sua usabilidade enquanto editores de código. CodeMirror é um componente JavaScript que fornece um editor de código para o navegador. Quando um determinado tipo de código que está a trabalhar está disponível, o código irá ser colorido facilitando assim a identificação dos diferentes elementos presentes no mesmo e poderá contar ainda com numeração de linhas.

Melhore a Interface do Editor de código WordPress com Codemirror

1. DOWNLOAD E PREPARAÇÃO

O primeiro passo é obter a biblioteca que vai permitir a alteração e utilização do editor Codemirror dentro do painel de administração WordPress. Faça download da última versão do Codemirror aqui. Codemirror tem suporte para várias linguagens, e depois de baixar os arquivos, descompacte-os  e envie-os para o diretório do seu template WordPress, criando uma nova pasta dentro da pasta do template. Neste caso utilizámos o nome codemirror, mas você poderá utilizar aquela que quiser:

Melhore a Interface do Editor de código WordPress com Codemirror

2. CODEMIRROR.PHP

Neste passo iremos criar um ficheiro denominado codemirror.php e introduzir algum código no mesmo, para fazer o registro do Codemirror, fazer a chamada para os vários elementos e para o núcleo do codemirror. Para isso, insira o seguinte código dentro do ficheiro:

<?php
add_action('load-theme-editor.php', 'codemirror_register');
add_action('load-plugin-editor.php', 'codemirror_register');

function codemirror_register() {

	wp_register_script('codemirror', get_template_directory_uri()."/codemirror/lib/codemirror.js");
	wp_register_style('codemirror', get_template_directory_uri()."/codemirror/lib/codemirror.css");

	wp_register_style('blackboard', get_template_directory_uri()."/codemirror/theme/blackboard.css");

	wp_register_script('xml', get_template_directory_uri()."/codemirror/mode/xml/xml.js");
	wp_register_script('javascript', get_template_directory_uri()."/codemirror/mode/javascript/javascript.js");
	wp_register_script('css', get_template_directory_uri()."/codemirror/mode/css/css.js");
	wp_register_script('php', get_template_directory_uri()."/codemirror/mode/php/php.js");
	wp_register_script('clike', get_template_directory_uri()."/codemirror/mode/clike/clike.js");

	add_action('admin_enqueue_scripts', 'codemirror_enqueue_scripts');
	add_action('admin_head', 'codemirror_control_js');
}

Como poderá notar, estamos a utilizar o diretório codemirror. Caso você tenha definido outro nome de diretório, terá de fazer as alterações necessárias neste código para que o mesmo funcione.

Ainda dentro do ficheiro codemirror.php, insira o seguinte código:

function codemirror_enqueue_scripts() {
	wp_enqueue_script('codemirror');
	wp_enqueue_style('codemirror');

	wp_enqueue_style('blackboard');

	wp_enqueue_script('xml');
	wp_enqueue_script('javascript');
	wp_enqueue_script('css');
	wp_enqueue_script('php');
	wp_enqueue_script('clike');
}

De seguida insira o seguinte código:

function codemirror_control_js() {
	if (isset($_GET['file'])) {
		$filename_to_edit = end(explode("/", $_GET['file']));
		$file = substr($filename_to_edit, stripos($filename_to_edit, '.')+1);
		switch ($file) {
			case "php": $file = "application/x-httpd-php"; break;
			case "js" : $file = "text/javascript"; break;
			case "css": $file = "text/css"; break;
		}
	}
	else {
		$file_script = $_SERVER['SCRIPT_NAME'];
		$file_script = end(explode('/', $file_script));
		if ($file_script == 'theme-editor.php')
			$file = "text/css";
		else
			$file = "application/x-httpd-php";
	}

?>

E para finalizar, insira o seguinte trecho de código:

	<script type="text/javascript">
		jQuery(document).ready(function() {
			var editor = CodeMirror.fromTextArea(document.getElementById("newcontent"), {
		        lineNumbers: true,
		        matchBrackets: true,
				mode: "<?php echo $file ;?>",
		        indentUnit: 4,
		        indentWithTabs: true,
		        enterMode: "keep",
		        tabMode: "shift",
				theme: "blackboard"
			});
		})
	</script>
<?php
}

?>

Salve as alterações feitas ao ficheiro, e envie-o para o diretorio do codemirror:

Melhore a Interface do Editor de código WordPress com Codemirror

3. INCLUIR O FICHEIRO CODEMIRROR.PHP

Este processo é bastante simples, que passa pela introdução do seguinte trecho de código dentro do ficheiro functions.php que está dentro do diretorio do seu template.

include("codemirror/codemirror.php");

Salve as alterações, e a partir deste momento o seu editor de código do WordPress irá ser alterado e passará deste estilo:

Melhore a Interface do Editor de código WordPress com Codemirror

Para este estilo:

Melhore a Interface do Editor de código WordPress com Codemirror

Como poderá observar nesta imagem, o editor não está a ocupar todo o espaço disponível para o mesmo, e por isso são necessárias algumas alterações ao nivel do CSS para que possamos tirar o maximo partido desta alteração ao editor de código dentro do WordPress.

4. ALTERAR O CSS

Dentro da pasta codemirror está a pasta lib, que contém o ficheiro codemirror.css. Localize o seguinte código:

.CodeMirror-scroll {
    overflow-x: auto;
    overflow-y: hidden;
    height: 300px;
    position: relative;
    outline: none;
}

E altere-o para o seguinte:

.CodeMirror-scroll {
  overflow-x: auto;
  overflow-y: hidden;
  height: 450px;
  position: relative;
  outline: none;
}

Desta forma terá mais espaço para ler o código e trabalhar sobre ele.

5. CÓDIGO FINAL

O código final a aplicar no ficheiro codemirror.php é o seguinte:

<?php
add_action('load-theme-editor.php', 'codemirror_register');
add_action('load-plugin-editor.php', 'codemirror_register');

function codemirror_register() {

	wp_register_script('codemirror', get_template_directory_uri()."/codemirror/lib/codemirror.js");
	wp_register_style('codemirror', get_template_directory_uri()."/codemirror/lib/codemirror.css");

	wp_register_style('blackboard', get_template_directory_uri()."/codemirror/theme/blackboard.css");

	wp_register_script('xml', get_template_directory_uri()."/codemirror/mode/xml/xml.js");
	wp_register_script('javascript', get_template_directory_uri()."/codemirror/mode/javascript/javascript.js");
	wp_register_script('css', get_template_directory_uri()."/codemirror/mode/css/css.js");
	wp_register_script('php', get_template_directory_uri()."/codemirror/mode/php/php.js");
	wp_register_script('clike', get_template_directory_uri()."/codemirror/mode/clike/clike.js");

	add_action('admin_enqueue_scripts', 'codemirror_enqueue_scripts');
	add_action('admin_head', 'codemirror_control_js');
}

function codemirror_enqueue_scripts() {
	wp_enqueue_script('codemirror');
	wp_enqueue_style('codemirror');

	wp_enqueue_style('blackboard');

	wp_enqueue_script('xml');
	wp_enqueue_script('javascript');
	wp_enqueue_script('css');
	wp_enqueue_script('php');
	wp_enqueue_script('clike');
}

function codemirror_control_js() {
	if (isset($_GET['file'])) {
		$filename_to_edit = end(explode("/", $_GET['file']));
		$file = substr($filename_to_edit, stripos($filename_to_edit, '.')+1);
		switch ($file) {
			case "php": $file = "application/x-httpd-php"; break;
			case "js" : $file = "text/javascript"; break;
			case "css": $file = "text/css"; break;
		}
	}
	else {
		$file_script = $_SERVER['SCRIPT_NAME'];
		$file_script = end(explode('/', $file_script));
		if ($file_script == 'theme-editor.php')
			$file = "text/css";
		else
			$file = "application/x-httpd-php";
	}

?>
	<script type="text/javascript">
		jQuery(document).ready(function() {
			var editor = CodeMirror.fromTextArea(document.getElementById("newcontent"), {
		        lineNumbers: true,
		        matchBrackets: true,
				mode: "<?php echo $file ;?>",
		        indentUnit: 4,
		        indentWithTabs: true,
		        enterMode: "keep",
		        tabMode: "shift",
				theme: "blackboard"
			});
		})
	</script>
<?php
}

?>

Se você pretender alterar o template utilizado no Codemirror, poderá escolher entre um dos seguintes:

Melhore a Interface do Editor de código WordPress com Codemirror

Para proceder á alteração, basta no código procurar blackboard.css e alterar para um dos itens listados na imagem acima. Experimente alterar o template do codemirror para ver qual aquele que melhor se adequa ao seu gosto!

Abraço!