Publicando código en archivos externos

English version of this post.
La publicación de código en el blog siempre ha sido difícil, eso es porque uno tiene que tener en cuenta que hay una gran cantidad de caracteres especiales que puede afectar a la base de datos y con el propio formato del post, aquí les presento el enfoque que estoy usando para publicar código para el blog y mantener ese código separado del contenido del post.

Plugins
En primer lugar necesitamos un par de plugins para poder escribir código fuente en WordPress en la forma en la que lo estoy haciendo, aquí están los dos:

  • El primero se llama SyntaxHighlighter Evolved y puede ser descargado de aquí, este plugin nos permite publicar código y cuenta con un gran soporte para múltiples lenguajes
  • El segundo se llama exec-PHP, este plugin nos permite ejecutar código Php dentro de nuestros posts, vamos a tomar ventaja de tener php para leer y publicar código que se encuentre contenido en archivos externos al post, éste plugin se puede descargar de aquí

Procedimiento
Primero que nada necesitamos descargar e instalar los plugins mencionados anteriormente, no voy a entrar en detalles de cómo hacer esto, hay un montón de información sobre cómo hacerlo en la web, por favor referirse a esa información.

Una vez instalados, es necesario tener acceso ftp a su sistema de archivos del servidor o tener una forma de cargar los nuevos archivos de scripts en el servidor, también se puede utilizar el programa para subir archivos de wordpress.

Como vamos a usar PHP para insertar nuestro código en la publicación, he creado una función PHP que básicamente hace eso, la función soporta publicar el contenido de un archivo como código fuente y también puede publicar solamente ciertas líneas de código si se especifica, la función es simple y se muestra a continuación.

blog_utils.php

<?php
function add_script($script_file_path, $language = 'bash', $start_line = -1, $end_line = -1,
    $att_collapse = 'false') {
    $data = file($script_file_path);
 
    // if no start line specidied, include all file, calculate endline number
    // by counting the data 
    if ($start_line == -1) {
        $start_line = 0;
        $end_line = $line = count($data);
    }
 
    // depending on the language of the file to be included is the type of header tag to include,
    // we now support to include syntax hignlight evolved scripts, quick latex scripts,
    // and pgn chess games all in external files
    switch ($language) {
        case 'inc':           // content to include in post 'as is' 
            break;
        default:
            echo htmlentities('[' . $language . ' collapse=' . $att_collapse . ']');
            break;
    }
 
    // here we just include the file content line by line, and depending on the language
    // we use htmlentities, pgn games does not need this 
    for ($i = $start_line-1; $i <= $end_line-1; $i++) {
        switch ($language) {
            case 'inc':        // content to include in post 'as is'
            case 'pgn':        // pgn games don't need escaping
                echo $data[$i];
                break;
            default:
                echo htmlentities($data[$i]);
                break;
        }
    }
 
    // depending on the language is the type of footer tag to include
    switch ($language) {
        case 'inc':            // content to include in post 'as is'
        case 'latexpage':      // pgn games don't need escaping
            break;
        default:
            echo htmlentities('[/' . $language . ']');
            break;
    }
}
?>

Como podemos ver, lo que hace esta función es imprimir los contenidos de los archivos especificados, también, se está especificando el lenguaje que se desea utilizar utilizando corchetes [], esta sintaxis es utilizada por el plugin SyntaxHighlighter Evolved para hacer su magia y hacer el coloreo del código.

Así que para utilizar el approach completo, necesitamos crear un archivo llamado blog_utils.php con la función que mostré arriba y subirlo a una carpeta en el servidor, dicha carpeta la llamaré scripts, finalmente, sólo se tiene que añadir algo de código PHP al post para tener el script publicado en el blog de wordPress, aquí está el código que he utilizado para incluir el código del archivo externo.

blog_utils_post.php

<?php
include_once(ABSPATH . '/scripts/blog_utils.php');
add_script(ABSPATH . 'wp-content/uploads/2017/03/template-wiki_php.txt', 'php');
?>

¿Interesante no es cierto? :),

Contras de este approach
Todo estaba muy bien hasta que.. Empecé a notar que había algo mal con este approach, el editor gráfico de wordpress modifica el código Php que se incluye en el post, traté de muchas maneras de poder resolver este conflicto pero al final sin suerte, publicar código de manera limpia en el blog es algo tan importante para mí que opté por deshabilitar el editor gráfico de wordpress completamente así que de ahora en adelante utilizo la versión de texto del editor y ¡soy un hombre feliz! 🙂

¡Saludos! 🙂
-Yohan

Leave a Reply

Your email address will not be published. Required fields are marked *