Contenido

Mejora tus themes con function_exists()

31 may

+ 7

Desde la versión 3 de PHP, function_exists() existe en la especificación del lenguaje y desde entonces ha sido una función muy importante dentro del apartado de Gestión de funciones. Con ella podréms controlar si una función existe o no antes de llamarla.

Descripción

bool function_exists ( string nombre_funcion )

Modo de uso

if (function_exists(‘muestra_algo’)) {
    muestra_algo();
} else {
    no_muestres_nada();
}

De esta forma comprobamos que la función muestra_algo() está declarada y podemos usarla, en caso de que no esté declarada lanzará la función no_muestres_nada();

¿Por que suelto esta chorrada que está en php.net? 

Principalmente por que a la hora de crear un theme para wordpress, mucha gente diseña su Theme teniendo en cuenta muchos plugins que obligan a los usuarios a instalar si quieren que el theme funcione. Como podeis ver he cambiado el theme (es temporal) y he estado probando varios y adaptando algunos, pero este ha sido el que más me ha gustado y se quedará unas semanas hasta que termine la versión 2.0 del rediseño :D

Pues en mi odisea por los themes que más me han gustado, he estado descubriendo que la gente no tiene en cuenta a los usuarios, y les “obligan” a instalar plugins si quieren como mínimo ver el theme, ya no hablemos de ponerlo en producción, cara al público.

Una forma de solucionar esto es usando esta función que al ser nativa de PHP y soportada desde la 3.0, te aseguras que funciona seguro sobre cualquier servidor “normal”. Y así haces tu theme más resistente y profesional.

Siempre es necesario la utilización de algún plugin, en ese caso tenerlo en cuenta no cuesta tanto. Se informa al usuario de que está preparado para soportar X plugins, pero no obligas a que los usen, lo aconsejas. Ahi está la diferencia que hace un theme pase los 10 segundos de vida, ya que lo pueden ver terminado y sin ningún tipo de problema.

Ejemplo de como montar esto

Un ejemplo típico, ya que es el más usado, es el plugin Gravatar. Este plugin suele está en todos los comentarios de casi todos los blogs, no me extrañaría que WordPress lo absorbiera en su próxima versión.

La línea normal es la siguiente:

<?php gravatar("R", 40, "http://www.somewhere.com/heatvision.jpg", "FF0000"); ?>

De está forma sino tienes el plugin instalado, en la línea donde tengas esta llamada se cortará la ejecución del theme, dejándolo a medias. Teniendo en cuenta que con una simple función puedes corregir eso, es un poco de tontos no usarlo ¿no?.

<?php if (function_exists(“gravatar”)) gravatar("R", 40, "http://www.somewhere.com/heatvision.jpg", "FF0000"); ?>

¿Facil no? Esto puede hacer que tu theme pase de ser ese que falla (piensa que hay gente que no sabe nada de plugins ni wordpress) a ser ese que esta chulo y si le pongo gravatar es más chulo aun…

wordpress, themes, wordpress themes, php

  • Como bien dices, esta función es de gran utilidad a la hora de construir un theme. No tenía idea de que venía incorporada con php, pensaba que era cosa de WordPress (claro, no tengo idea de programación) y la vine a descubrir al juguetear con Unsleepable y tratar de implementarle widgets (ahí hay otro ejemplo de su uso, aunque más complejo, me parece)

    Buen dato!

  • Tienes razón, de hecho hay muy pocos themes o bueno al menos yo solo he visto uno que use function_exists y ese se el K2 que utiliza varios plugins pero tu decides si los instalas o no, que bueno que lo comentas para que pues la gente que hace themes o los que quieran empezar a hacer el suyo puedan incluir sus plguins favoritos pero permitir al usuario que los instale o no…

  • Y como le haría si a parte de evitar que se ponga una funcion inexistente, la reemplazara por lo que tu quisieras? con OR? como se usa OR en wordpress?

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.