Tengo lo que parece ser un problema bastante problemático con la función get_theme_mod en la última versión de Wordpress. Solo en servidores particulares (de los cuales se cumplen todos los requisitos de Wordpress) la función no devolverá el valor guardado que puedo ver almacenado en la base de datos. Sin embargo, si especifico un valor predeterminado para la función, siempre devolverá el valor predeterminado del segundo argumento.
Estoy realmente perdido aquí porque todos los servidores ejecutan PHP 5.3 y más que las versiones requeridas de MySQL. Todos los entornos son PHP y Apache sin nada en el frente o en el medio. Esto no parece ser un error constante, solo está sucediendo en servidores particulares.
Estoy utilizando la API de personalización del tema de Wordpress en mi proyecto y en los servidores infractores he notado lo siguiente:
- Al realizar cambios en el panel de vista previa de la API de personalización de temas, se reflejan. Sin embargo, navegar a una parte diferente del sitio en el panel de vista previa (hacer clic en un enlace o lo que sea) y volverá a su valor predeterminado. Al actualizar también, todo vuelve a sus valores predeterminados.
- La inspección de la solicitud AJAX a través de la pestaña "Red" de Chrome Developer Tools muestra que los datos se están enviando correctamente y el servidor está devolviendo un código de respuesta de 200 insinuando que todo está bien.
- La inspección de la fila de la tabla de la base de datos apropiada que almacena los datos serializados que se han guardado muestra que en realidad se está guardando correctamente, pero cuando se usa la función get_theme_mod () no se devuelve.
- Intenté descartar el contenido de la función "Get_theme_mods ()" para ver qué devolvería y no obtengo nada (no se devuelve absolutamente nada). Sin embargo, hacer esto en un servidor en funcionamiento devuelve el contenido apropiado.
- Todos los valores de la API de personalización del tema se definen de acuerdo con las sugerencias de la documentación, e incluso he intentado configurar el tipo de configuración en "theme_mod" para que no sirva de nada (aunque de todos modos, theme_mod es el predeterminado).
- Cuando intento llamar a get_theme_mod () si agrego un set_theme_mod antes de la llamada a la función y establezco un valor manualmente, guarda y la función get_theme_mod obtiene el valor guardado justo antes. Esto significa que los cambios parecen estar actuando como si solo se estuvieran guardando temporalmente (aunque el DB dice lo contrario).
Tampoco tengo ningún complemento instalado o activado que pueda sobrescribir cualquiera de las opciones del tema o evitar que se devuelvan. Mi única conclusión es que se relaciona con algún tipo de almacenamiento en caché a nivel de host web (APC quizás) o tal vez Wordpress que almacena en caché las opciones (supongo que get_theme_mod) se almacena en caché de manera muy similar a la función get_option que está en otra parte.
Si necesita algún código, solo hágame saber lo que necesita (ya que no estoy seguro).
Editar **
Hice un var_dump en el contenido de las funciones get_theme_mod que se llamaban y obtuve lo siguiente (lo hice para bastantes, no todas). Las etiquetas en la parte frontal con dos puntos son para mostrar qué valor es qué.
Texture: string(4) "none"
Background Color: string(0) ""
Theme Color: string(7) "#FF0000"
Body Font: string(0) ""
Heading Font: string(0) ""
Por frustración, también probé el siguiente código y no se devuelve nada:
$options = get_option("theme_mods_aphrodite");
var_dump($options);
El resultado que obtengo de esto es bool (falso).
Otra cosa que intenté fue usar el personalizador de temas Twenty Twelve predeterminado y funcionó, por lo que algo en mi tema está destruyendo la fila de opciones e impidiendo que funcione. Pero lo que hace que eso sea extraño es que el tema con el que tengo problemas funciona bien en otros servidores que intento, solo se trata de incidentes aislados particulares y la tabla de la base de datos está intacta.
Editar # 2 **
Como se sugiere a continuación, pegué mi código de personalización de tema en otro tema (elegí Twenty Twelve porque funciona fuera de la caja) y parece que mi código de registro rompe el personalizador y no puedo entender por qué.