Sobreescribe funciones del núcleo de WordPress

Tweet about this on TwitterShare on Google+Share on FacebookEmail this to someonePrint this page

¿Por qué sobreescribir en lugar de eliminar?

A primera vista, modificar los archivos del núcleo parece mucho más fácil que sobreescribir las funciones. Pero ¿qué harás cuando tengas que actualizar tu blog?. Más o menos cada dos meses salen nuevas versiones de WordPress, así que será un largo y aburrido trabajo de volver a modificar cada archivo del núcleo previamente modificado por ti.

Por suerte, hay una solución al problema. Las llamadas a las funciones de filtro de WordPress. Por ejemplo, cuando instalas una extensión de WordPress que modifica alguna función del núcleo de WordPress, puedes estar seguro de que esa extensión usa  un filtro.

Usando filtros

Como he dicho, un filtro puede usarse desde una extensión. Pero no necesariamente: También puedes usar uno en el archivo functions.php de tu tema. Si tu tema no tiene un archivo functions.php, podrías crearlo.

La función de filtro más común se llama add_filter():

add_filter('hook_name', 'your_filter', [priority], [accepted_args]);


Vamos a estudiar en detalle los parámetros obligatorios y opcionales:

  • hook_name: (obligatorio) el nombre del enganche proporcionado por WordPress. Define cuando se aplicará tu filtro.
  • your_filter: (obligatorio) la función personalizada que se debe llamar en lugar de hook_name.
  • priority: (opcional) usado para especificar el orden en el cual serán ejecutadas las funciones asociadas con un determinado filtro.
  • accepted_args: (opcional) el número de argumentos aceptados.

Ejemplo de uso de la función add_filter()

Vamos a ver cómo usar la función add_filter() con un ejemplo práctico. El siguiente código sobreescribe la función bloginfo() .

add_filter('bloginfo', 'mybloginfo', 1, 2);
add_filter('bloginfo_url', 'mybloginfo', 1, 2);

function mybloginfo($result='', $show='') {
        switch ($show) {
        case 'wpurl':
                $result = SITE_URL;
                break;
        case 'template_directory':
                $result = TEMPL_DIR;
                break;
        default:
        }
        return $result;
}

Eliminando filtros

Además de ser posible añadir nuevos filtros para sobreescribir funciones del núcleo de WordPress, también es posible eliminar los filtros existentes. Por ejemplo, mucha gente que publica código en su blog está cansada de la sustitución de las comillas normales por comillas curvadas, porque les rompe el código. Una función de WordPress llamada wptexturize() sustituye las comillas normales por las curvadas. Como esto es un filtro, es posible eliminarlo simplemente y librarse de las comillas curvadas:

<?php remove_filter('the_content', 'wptexturize'); ?>

¿Nada difícil, no?. Ahora sabes como sobreescribir funciones del núcleo de WordPress sin editar los archivos del núcleo, así como eliminar filtros no deseados.

Traducción del original: How to: Overwrite WordPress core functions

5 pensamientos en “Sobreescribe funciones del núcleo de WordPress

  1. Gabriel Cuesta

    Muchas gracias por el post, me va a ser muy útil ya que en mi empresa estamos utilizando WordPress como CMS y a veces me veía en la necesidad de tener que modificar el núcleo para variar una función.

    Un post útil al 100%.

  2. Jós

    Hola samuel, me quedó una duda por si puedes contestar aquí. Como puedo cambiarle el nombre al filtro? porque me aparece en el home pero este dice ‘filter’. está la posibilidad de cambiar eso y ponerle otro nombre como ‘filtro de tanto’ o ‘Busca’ u otro nombre?. eso gracias.

    1. Samuel Aguilera

      Pues simplemente crea una función, desde esta función llamas a todas las que quieras llamar, y añades esta función al filtro que vayas a usar.

Deja un comentario

Tu dirección de email no será publicada. Campos obligatorios marcados con *