En este post les comparto un fix de compatibilidad con PHP 7 en WP PageNavi Style. Es un plugin muy usado por muchos sitios en conjunto con el clásico WP-PageNavi, y se usan en conjunto para darle estilo a la paginación de posts.

El PageNavi remplaza los links “anterior” y “siguiente” por el ya conocido paginador, y el PageNavi Style permite aplicar uno de sus templates predefinidos de color para que no sea aburrido y en blanco y negro.

PageNavi Style

El problema es que el plugin PageNavi Style está abandonado hace varios años. Y los errores surgen ahora que cada vez más se masifica el uso de PHP 7. Un simple error en una línea de código es el culpable de que no se carguen las opciones del plugin en el backend, quedando totalmente inutilizado:

compatibilidad con PHP 7 en WP PageNavi Style

Pero por suerte se puede corregir fácilmente

Para esto, deben abrir el archivo includes/options.php, y en la línea 70 remplazar:

if (eregi(“\.css”,$file)) { /* Look for files with .png extension */

por: 

if (preg_match(“/\.css/“,$file)) { /* Look for files with .png extension */

Y con eso es suficiente.

El problema ya fue reportado en el foro de soporte del plugin.

Usar ereg/eregi en PHP era una mala práctica muy arraigada hace años, porque esas instrucciones dejaron de recomendarse hace años debido a que preg_match es más veloz y consume menos memoria. Entonces, luego de 7 años de advertencias, los desarrolladores del lenguaje PHP decidieron eliminar esas instrucciones obsoletas en PHP 7, pero ahora todo plugin o script que use ereg/eregi va a generar errores.

Nótese que si en tus logs de errores de PHP están registrándose problemas relacionados con las instrucciones ereg/eregi, la solución de este post pueden tomarla de ejemplo para aplicar a muchos otros scripts y así actualizarse a preg_match.

En algunos casos puede ser tedioso porque hay scripts que hacen un uso muy intensivo de ereg/eregi, así que si tienen scripts con este error, es señal de que se encuentran ante abandonware… o un developer procrastinador serial, porque el aviso de obsolescencia de ereg/eregi comenzó a darse hace varios años, concretamente desde que se lanzó PHP 5.3 allá por el… 2009? 🙂