Tag Archives: Wordpress

Evitar que WordPress remueva los saltos de línea de los artículos

Introducción.

Wordpress logo

  Son muy pocos los problemas que he tenido con WordPress a lo largo de estos varios años escribiendo en el blog.  Uno de los casos mas molestos sucede cuando los saltos de línea de los artículos o comentarios empiezan a desaparecer. 

Este problema me sucedió inicialmente cuando utilizaba Google Chrome únicamente, sin embargo en los últimos días empezó a suceder con Mozilla Firefox 5 también, así que tuve que descartar la explicación de incompatibilidad con el primer navegador.

Después de una búsqueda en los foros no he encontrado cual es la causa específica del problema sin embargo parece estar en TinyMCE, el editor WYSIWYG que incluye WordPress por defecto.  Para este problema he encontrado una solución muy simple que parece estar funcionando bien hasta el momento.

Solución.

La solución consiste en instalar el plugin TinyMCE Advanced y acceder a sus opciones de configuración mediante la opción Settings > TinyMCE Advanced del menú izquierdo del Dashboard.

En la sección de opciones avanzadas, seleccionar la casilla de verificación correspondiente con la opción para evitar que se remuevan automáticamente las etiquetas <p> y <br>.

Activar esta opción de la configuración de TinyMCE Advanced
Activar esta opción de la configuración de TinyMCE Advanced

Presionar el botón Save Changes para aceptar los cambios y verificar que estos hayan tenido el efecto deseado.

Evitando el reemplazo de los guiones y comillas dobles en WordPress

Introducción.

WordPress tiene una característica que consiste en reemplazar ciertos carácteres o cadenas en sus correspondencias mas bonitas, por ejemplo reemplaza los guiones dobles por un único guión mas largo que el normal.  Esto lo hace para embellecer los textos que se publican.

Este loable objetivo puede ser interesante en la mayoría de los casos pero es un total infortunio para quienes publicamos código fuente o textos para ejecutarse en la línea de comando los cuales deberán transcribirse de manera fiel o simplemente fallarán debido a que cualquier variación como las propuestas les harán perder su validez sintáctica.

Hace un tiempo encontré como solución modificar las líneas exactas en las cuales WordPress realiza esta inoportuna conversión, sin embargo estas líneas pertenecen a un archivo del núcleo de WordPress y desafortunadamente es sobreescrito durante las actualizaciones de WordPress y por ende las modificaciones se pierden con la misma regularidad.

Para solventar esto he encontrado una solución similar que se basa en la adaptación de un plugin ya existente, así que las modificaciones perdurarán a las actualizaciones de WordPress y sólo deberán repetirse ante una posible actualización del plugin, las cuales por supuesto suceden con una frecuencia mucho menor.

Procedimiento.

Instalar y activar el plugin de WordPress llamado untexturize.

Editar el contenido del archivo wpuntexturize.php.  Por facilidad se recomienda utilizar el mismo editor de Plugins que provee WordPress.

Identificar el código fuente de la función c2c_wpuntexturize y modificar su contenido de la siguiente manera.

$char_codes = array( '&#8216;', '&#8217;', '&#8220;', '&#8221;', '&#8242;', '&#8243;',
                     '&#8212;', ' &#8212; ', '&#8211;', ' &#8211; ', 'xn--');   // nuevo.
$replacements = array( "'", "'", '"', '"', "'", '"',
                       '---', ' -- ', '--', ' - ', 'xn&#8211;');    // nuevo.
return str_replace( $char_codes, $replacements, $text );

Si se nota, las líneas marcadas con el comentario nuevo han sido agregadas con respecto al código fuente original del plugin, estas líneas corresponden con la información de los reemplazos de los guíones facultando al plugin a regresarlos a su presentación original mas allá de sólo las comillas dobles las cuales son la funcionalidad propia del complemento.

A partir del momento en que se realicen estas modificaciones, las entradas del blog mostrarán correctamente las comillas y guíones dobles en sus textos.

Enlaces.

Modo de mantenimiento de WordPress 3

Cuando se realizan actualizaciones WordPress 3 pasa automáticamente a un modo de mantenimiento, es decir, nadie puede acceder al sitio durante la actualización.  Si alguien consulta el blog obtendrá un mensaje como el siguiente.

No disponible por mantenimiento programado. Vuelve a comprobarlo en unos minutos. Gracias

O su versión en inglés.

Briefly unavailable for scheduled maintenance. Check back in a minute.

Algunas veces algo falla en la actualización, frecuentemente me ha sucedido durante la actualización de plugins, y el modo mantenimiento no se restaura automáticamente queda el sitio aisaldo.

Para corregir este problema es necesario acceder al sistema de archivos del sitio y remover un archivo llamado .maintenance en la raíz del blog.

Evitando el reemplazo de los guiones dobles en WordPress 2.9

Introducción.

Algo que extrañamente no había notado hasta el día de hoy es que WordPress reemplaza, a manera de característica y en total contra de mi voluntad, los guíones dobles () por simples (-) en el momento de generar la presentación de los artículos.  Esto es altamente incoveniente ya que ciertos comandos, especialmente de UNIX, requieren de opciones que inician con doble guión, como por ejemplo –help.

El método que encontré para evitar este problema no es probablemente el mas elegante de todos, sin embargo funciona muy bien.  Debe tenerse muy en cuenta en el momento de actualizar el núcleo de WordPress ya que, al modificar un archivo de la distribución, probablmente deba aplicarse la modificación cada vez que se instale una nueva versión.

Procedimiento.

Edite el archivo responsable del formateo de los artículos.

$ vi wp-includes/formatting.php

Ubique las variables $static_characters y $static_replacements que se encuentran en las líneas 56 y 57 de la versión 2.9 de WordPress (pueden variar en otras versiones).

$static_characters = array_merge(array('---', ' -- ', '--', ' - ', 'xn&#8211;', '...', '``', ''s', '''', ' (tm)'), $cockney);
$static_replacements = array_merge(array('&#8212;', ' &#8212; ', '&#8211;', ' &#8211; ', 'xn--', '&#8230;', $opening_quote, '&#8217;s', $closing_quote, ' &#8482;'), $cockneyreplace);

Remueva o comente (mucho mejor) los primeros cinco elementos de cada uno de los arreglos.

$static_characters = array_merge(array(/* '---', ' -- ', '--', ' - ', 'xn&#8211;', */ '...', '``', ''s', '''', ' (tm)'), $cockney);
$static_replacements = array_merge(array(/* '&#8212;', ' &#8212; ', '&#8211;', ' &#8211; ', 'xn--', */ '&#8230;', $opening_quote, '&#8217;s', $closing_quote, ' &#8482;'), $cockneyreplace);

Grabe el archivo.

Listo!

Resaltando la sintáxis de códigos en WordPress

Hasta ahora no he encontrado una solución para resaltar la sintáxis de segmentos de código en WordPress.  Hasta la fecha he utilizado varios plugins con resultados parcialmente exitosos.

El primero que probé fue CodeHighlighterPlugin de IdeaThinking.com.  Es simple, resalta la sintáxis de múltiples lenguajes y opcionalmente permite mostrar un número de línea.  Para señalar el código a resaltar se debe encerrar entre etiquetas <pre lang=”XXXX” lineno=”1″>…</pre>.

Después encontré a varios blogs que resaltaban el código de manera mas elegante, con segmentos que coloreaban las líneas y permitían cambiar entre vista enrriquecida y vista plana así como copiar al portapapeles.  Encontré entonces al Google Syntax Highlighter for WordPress de Peter Ryan.  Soporta menos lenguajes (no incluye a bash por ejemplo) sin embargo es mi favorito hasta el momento.  Para segmentar el código a resaltar se debe encerrar entre etiquetas <pre name=”code” class=”XXXX”>…</pre>.

El problema hasta ahora es que TinyMCE, el editor WYSIWYG de WordPress, es felíz borrándome los atributos de los pre convirtiéndo mis fragmentos de código en invisibles para el resaltador haciendo que cada vez que edite o cree un artículo con códigos tenga que editar los textos de manera visual y después tenga que corregir las etiquetas de manera HTML.  Es infame!

Buscando una mejor opción ante este problema encontré el plugin SyntaxHighlighter2 de S H Mohanjith el cual hábilmente utiliza una sintaxis BBCode para segmentar el código a resaltar:  [source language='XXXX']…[/source].

Sin embargo le encontré un problema colateral al plugin: al no utilizar etiquetas pre, el editor/navegador no respetan los espacios en blanco que contenga el código a su izquierda, es decir, se ignora la identación.  El autor muy amablemente me sugirió copiar y pegar los códigos desde el modo HTML sin embargo esto es lo que precisamente quiero evitar.

Anoche, ante la imposibilidad de encontrar una mejor solución y mi testarudez, tuve una idea: utilizar el plugin de Peter Ryan el cual no funciona como quisiera porque el editor le remueve el atributo name y agregárselo de manera dinámica cuando cuando la página se ha desplegado en el cliente.

Hoy me dí manos a la obra y encontré que WordPress utiliza jQuery así que investigué como manipular el evento onLoad, obtener todas las etiquetas pre y como agregarles el atributo name=’code’ faltante.  El siguiente fue el resultado.

<script type='text/javascript'>
jQuery(document).ready(function() {
    jQuery('pre').each(function () {
         jQuery(this).attr('name', 'code');
    });
});
</script>

Por razones aún desconocidas no pude hacer funcionar el plugin en el onLoad también para que se encolaran los códigos y terminaran ejecutándose secuencialemente cuando el árbol DOM estuviera listo.  Como alternativa modifiqué apropiadamente el archivo fuente del plugin que inserta el script en la página del blog.

En wp-content/plugins/google-syntax-highlighter/google_syntax_highlighter.php agregué las siguientes líneas al final del código.

<script class="javascript">
/* sección de código agregada */
jQuery('pre').each(function () {
        jQuery(this).attr('name', 'code');
});

/* código ya existente en el archivo */
dp.SyntaxHighlighter.ClipboardSwf = '<?php echo $current_path; ?>Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
</script>

Aún tengo que utilizar el módo HTML o utilizar el botón Insert/Edit Attributes de TinyMCE para indicarle a las etiquetas pre cual es el lenguaje de su contenido (class), sin embargo ya no tengo que preocuparme por el atributo name ni porque este sea borrado cada vez que edite al artículo.

Enlaces.

Problemas con el Flash Uploader de WordPress

Desde hace unos días para acá dejo de funcionar el Flash Uploader de mis sitios con WordPress que me permitía subir archivos de manera mas comoda.  Indagando un poco descubrí que el problema no se origina en mi WordPress sino que por el contrario, se origina en la última versión de Adobe Flash (10) la cual probablemente actualicé hace poco.

Para solucionar el problema existen dos caminos: regresar (downgrade) a la versión 9.x del plugin o esperar a que se libere WordPress 2.7 el cual supuestamente soluciona el problema.  Versiones posteriores no utilizarán Flash para el uploader.

Por mi parte elegí la primera opción ya que soy bastante impaciente y no me gusta esperar.  Para esto desinstalé la versión 10 que tenía e instalé la 9r151 que descargué de este sitio.

Para mas información acerca de problemas con el Flash Uploader recomiendo este post del foro de WordPress que parece un tratado de patología al respecto: Image/Media Uploader problems?.

Enlaces:

Plugin CodeHighlighterPlugin de wordpress

Esta semana instalé el plugin CodeHighlighterPlugin para WordPress el cual está basado en GeSHi como su motor genérico para resaltar la sintaxis.

El código fuente a resaltarse se debe encerrar entre etiquetas <pre> las cuales aceptan los siguientes parámetros.

Lenguaje del código fuente (lang=”XXX”). Es obligatoria e indica en que lenguaje se encuentra el snippet de código fuente inscrito. Su valor debe ser una de las siguientes cadenas.

actionscript, ada, apache, asm, asp, bash, c, c_mac, caddcl, cadlisp, cdfg, cpp, csharp, css, delphi, html4strict, java, javascript, lisp, lua, mpasm, nsis, objc, oobas, oracle8, pascal, perl, php, python, qbasic, sas, smarty, vb, vbnet, visualfoxpro, xml

Número de línea (lineno[=d]). Es opcional, si está presente hace que las líneas de código se presenten numeradas. Adicionalmente es posible especificar un valor a partir del cual se numerarán las lineas.

#include < stdio.h >

int main(void)
{
	printf ("Hola Mundo");
}

Otro ejemplo.

function hola($nombre)
{
    return "Hola " . $nombre;
}