Contenido

El fichero my-hacks.php en Wordpress

19 Feb

+ 18

Hace ya tiempo que quería comentar algo acerca del fichero my-hacks.php se encarga de contener los hacks que queremos que funcionen sobre nuestra configuración de Wordpress. Para ver como funciona hagamos un pequeño ejemplo:

Ejemplo my-hacks.php

Imaginemos que queremos que todas las palabras “ajax” de nuestros posts apunten a la categoría del blog, para ello podemos optar por hacer 2 cosas:

1) Un plugin que nos ejecute la funcionalidad deseada.

2) Añadirlo al fichero my-hacks.php

Diferencia entre plugin y my-hacks.php 

La diferencia principal es que el fichero my-hacks.php necesita menos procesos para ejecutarse ya que los plugins son tratados de una forma especial, almacenando en la base de datos los que están activos y los que no. De esta forma si tenemos que hacer una pequeña modificación nos es más rentable, en cuanto a consumo de recursos, añadirlo en el fichero my-hacks.php que usar un plugin el cual tendrá que comprobar cada vez que lo ejecute si está activo o no.

Este fichero además, se llama en la línea 231 del fichero wp-settings.php, lo que singnfica que se ejecuta antes de do_action('init'); que es el primer punto al que podemos asociar un plugin. Para entederlo pensemos en las acciones de Wordpress, que son una funcionalidad que nos permite extender las funciones que se ejecutan en ciertos puntos desperdigados por Wordpress, editar un post, publicar, comentar, modificar un theme,… podemos marcar esos puntos para que nuestras funciones sean ejecutadas en ellos mediante el uso de add_action();.

Con my-hacks.php, podemos adelantarnos algo más a la acción init, teniendo un poco más de control sobre nuestro Wordpress.

La funcionalidad

La funcionalidad que deseamos podríamos formarla con una función de 1 línea de tamaño. Veamos el código:

function replaceAjax($content = '') {
	return str_replace('ajax', '<a href="'.get_category_link(AJAX_ID).'" title="Ajax">ajax</a>', $content);
}

Simplemente reemplazamos la palabra ajax por un enlace a la categoría Ajax, para ello necesitamos conocer el ID de dicha categoría. En el Panel de Administrador > Administrar > Categorías.

Añadimos la acción

Una vez establecida la funcionalidad, tenemos que decirle a Wordpress que ha de ejecutar dicha funcionalidad en un momento determinado, en nuestro caso al hacer el the_content.

add_action("the_content", "replaceAjax");

El fichero my-hacks.php  

Por lo cual nuestro fichero debería quedar de la siguiente forma.

<?php
/*
* replaceAjax
* Reemplaza las palabras ajax por el enlace a la categoría del blog
*/

function replaceAjax($content = '') {
		return str_replace('ajax', '<a href="'.get_category_link(AJAX_ID).'" title="Ajax">ajax</a>');
}

add_action('the_content','replaceAjax');

?>

Ubicación del fichero

El fichero my-hacks.php está, a mi parecer, mal ubicado ya que Wordpress lo va a buscar en el directorio raiz, y personalmente creo que todo lo relacionado con la personalización debería ir en wp-content/, pero bueno, podría ser peor… (wp-include/languages/…).

Activación de sistema my-hacks.php

Para evitar comprobaciones de existencia del fichero, Wordpress dispone de un check en Opciones > Misceláneas que nos permite activar o desactivar esta propiedad de Wordpress.

Muy bueno, me preguntaba para que servía =)

Gracias

Muy bueno Andres… Eres un crack del Wordpress.
Una pregunta… si usas WP-Cache… se chachea todo en ficheros, no?, entonces se reducuiria la carga de base de datos a la hora de llamar a los plugins, no?
Por que me parece más mantenible hacerlo todo con plugins antes que aplicar hacks.
Que creeis?
Muy buen articulo, si señor!
Un saludo.

@David: Buenas David, exactamente WP-Cache lo que hace es generar ficheros HTML con el resultado de la ejecución de Wordpress. Lo que significa que en el ejemplo de arriba, guardará los posts con la palabra ajax cambiada a enlace.

La única ventaja real de usar my-hacks.php o usar un plugin es que los plugins requieren ciertas comprobaciones previas para funcionar, lo que lo hacen un poco más pesados. Pero por otro lado la facilidad de uso de los plugins lo hacen ideales para usuarios noveles.

Yo usaría my-hacks.php para tareas concretas y simples. Y delegaría en plugins todo lo que el usuario necesite.

¡Muy bueno!

Pero fíjate que en la línea

return str_replace(’ajax’, ‘ajax‘);

Te ha faltado el último parámetro de la función str_replace (mixed subjet); debería ser:

return str_replace(’ajax’, ‘ajax‘,$content);

¡Exitos!

Yo tenia entendido que no era recomendable utilizar el fichero my-hacks.php.

¿Estoy equivocado?

Un saludo.

Ok Andres, entendido.
Muchas gracias.

Saludos.

@Albert: No es recomendarlo usar para reemplazar los plugins. Lo ideal es usarlo con cabeza y si administras unos cuantos blogs, te puede ayudar a gestionar tareas internas no desarrolladas como plugins.

Más que nada es una utilidad que Wordpress posee y que está bien conocer para salvarnos el cuello en un momento determinado.

Si no me falla la memoria, a partir de WP 2.2 (o era 2.3), ya puedes mover wp-includes/languages/ a wp-content/languages/

Lo cual ya deja el sistema mas transparente para actualizaciones. (Aunque no deberías sufrir tanto si utilizas SVN para esto :D)

Hola, quería saber si puedo hacer que la palabra solo se sustituya una vez por post.
La función me interesa mucho, pero si sustituye todas las palabras, las entradas quedarían muy cargadas de enlaces.

@David: Con la versión para PHP 5 de str_replace() puedes usar un parámetro que indica el número de reemplazos que quieres hacer.

Saludos

Hola Andrés:
Estoy implementando un sitio con Wordpress mu y quise incluir esta función en el desarrollo, desafortunadamente no está considerada en la versión 1.5.1, ahora que salió la versión 2.6 de WP espero la correspondiente a WP mu.
Lo probé en mi sitio, pero uso un tema con muchas variables y alguna de ellas entra en conflicto con el hack.
Coincido contigo en que es mejor usar este sistema para algunas instrucciones precisas, en lugar de usar plugins que retardan la carga de las páginas.
Saludos

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo