Como ejecutar código PHP en un widget de wordpress

¡Compártelo!

Cuando desarrollamos una web en WordPress, en ciertas ocasiones nos encontramos con la necesidad de escribir código php y que se ejecute en un widget de WordPress. En estos widgets tenemos la opción de insertar texto plano o HTML, pero no podemos escribir código php.

Código C

Para que se pueda ejecutar código php tenemos que introducir un filtro en WordPress para poder ejecutar código php en un widget. Muchos plugins realizan esta función, pero mejor que instalar un plugin, es añadir un código al archivo functions.php de nuestro theme. El código es el siguiente:

 add_filter('widget_text','execute_php',100);
function execute_php($html){
if(strpos($html,"".$html);
$html=ob_get_contents();
ob_end_clean();
}
return $html;
} 

Para confirmar que funciona, tenemos que insertar en un widget de texto un código php de prueba:

[php] <?php echo “hola mundo” ?> [/php]

Y en nuestro sitio deberíamos ver el “hola mundo”.

Breve explicación de lo que hace el código

Línea 1: add_filter engancha una función a una acción específica de un filtro.

Los filtros son enganches que WordPress utiliza para modificar varios tipos de texto antes de agregarlos a la base de datos o mandarlos a la pantalla del navegador.

El primer parámetro es el nombre del filtro a enganchar (widget_text) mientras el segundo es el nombre de la función que va a ser llamada cuando el filtro es aplicado (execute_php). La tercera es la prioridad, y 100 debería garantizarnos una prioridad muy baja, ya que los números más bajos se corresponden con los principios de ejecución, y el valor predeterminado es 10.

widget_text es el filtro aplicado al widget de texto de los widget de texto de WordPress.

Así que al final le estamos diciendo a WordPress que ejecute la función execute_php cuando el contenido del widget de texto se haya generado.

Línea 2: función execute_php. Tiene en cuenta el argumento, el código generado HTML por el widget de texto.

Línea 3: busca la subcadena <?php dentro del código HTML. Si encuentra esta subcadena, significa que hay código php que tiene que ser ejecutado dentro del widget.

Si te preguntas porqué busca “<“.”?php” en vez de “<?php”, es para asegurarse de la correcta sintaxis usada en la mayoría de los editores.

Línea 4: ob_start() convierte los búferes de salida. Mientras los búferes de salida están activos no se envía la salida de la secuencia de comandos, en vez de esto la salida se guarda en un buffer interno. Esto significa que el HTML producido por el widget de texto se guarda temporalmente en un buffer interno.

Línea 5: en este momento tenemos que evaluar el código HTML como si se tratara de un script php. La función eval hace el trabajo, pero tenemos que agregar <> en el código HTML (otra vez, dividido en dos para evitar problemas de resaltado) porque hay que decir a la función php eval que no puede iniciarse desde el principio de la cadena HTML.

Un ejemplo: si mi widget de texto contiene

[php]<?php echo $_SERVER[‘REMOTE_ADDR’]; ?>[/php]

todo va a funcionar bien porque el texto se inicia con php. Pero en este caso:

[php]your IP: <?php echo $_SERVER[‘REMOTE_ADDR’]; ?>[/php]

la función eval fallará porque hay texto antes de <?php y se analiza como php y devolverá un error. Es por eso que el texto se cambia a

[php]?>a value: <?php echo $a; ?>[/php]

le decimos a la función eval que no empezamos con código php.

Línea 6 y 7: una vez que el php ha sido procesado, tenemos que guardar el contenido del búfer de salida, limpiando el buffer de salida y cerrar el buffer de salida.

Finalmente, en lalínea 9 el HTML se devuelve, con el php correctamente interpretado.

Y esto esto es todo, sin necesidad de ningún plugin.

Artículo traducido del inglés de este enlace.

¿Te ha gustado el artículo? Comenta tu opinión y dinos que piensas del tema, y si te gusta el artículo por favor compártelo en tus redes sociales.

Opt In Image
¿Quieres conseguir más suscriptores?
  • Descubre los secretos para que tu lista crezca rápidamente.
  • Recibe el PDF 7 estrategias para duplicar tu lista de correo.
  • Tendrás más suscriptores con las mismas visitas.

100% libre de SPAM.

Acerca de Luis Miguel Delgado

Emprendedor en cambio permanente. Buscando nuevos proyectos y actividades que desarrollar. "Vive cada día como si fuera el último". Si quieres saber más sobre mí puedes leer mi página acerca de.

Comentarios

  1. Hola!

    He probado realizar este cambio con el theme responsive pero me da fallos. Igual he introducido el código php mal en functions.php, hay algún sitio donde ubicarlo o simplemente en el mismo codigo?

    Gracias!

  2. excellente

Opina

*