Problema con get_theme_mod que devuelve un valor en blanco en lugar del valor guardado

4

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é.

    
pregunta Dwayne Charrington 15.03.2013 - 01:23

3 respuestas

3

Tuve el mismo problema ... usando type=option y luego get_option din't work tampoco.

Probando con otro elemento de opción y funciona ... y probando con MYTHEMENAME_THEME_OPTION sin el corchete para el elemento y obtuve una matriz, así que supongo que es la forma correcta.

Por lo tanto, solo una sugerencia para aquellos que encontraron esta publicación pero que aún tienen un valor en blanco ... cuando usa este código:

$wp_customize->add_setting('mytheme[mytext]', array(
    'default'        => 'some value you want default',
    'capability'     => 'edit_theme_options',
    'type'           => 'option',
));

$wp_customize->add_control('textControl', array(
    'label'      => __('LabelText', 'mytheme'),
    'section'    => 'parameters_thrive',
    'settings'   => 'mytheme[mytext]',  ));

luego, para obtener trabajo, necesita utilizar cada configuración como un valor individual,

$wp_customize->add_setting('mytext', array(
    'default'        => 'some value you want default',
    'capability'     => 'edit_theme_options',
    'type'           => 'option',
));

$wp_customize->add_control('textControl', array(
    'label'      => __('LabelText', 'mytheme'),
    'section'    => 'parameters_thrive',
    'settings'   => 'mytext',   ));

Donde setting = myText , entonces no es más una matriz (antes de wasmytheme[mytext] ) ahora es como un único elemento / valor, una cadena. Siga adelante y use la función get_option() para usar el valor que desee.

    
respondido por el user39067 06.10.2013 - 03:43
2

Nunca descubrí por qué get_theme_mod no funcionó. Sin embargo, encontré una ingeniosa solución para resolver este fastidioso error en caso de que alguien más se encuentre en una situación similar.

Tienes que cambiar todas las configuraciones para escribir = > 'option' y luego ya no puedes usar get_theme_mod más y en su lugar tienes que usar get_option (que yo sepa). Un hallazgo y reemplazo en get_theme_mod para get_option no debería doler. Funcionó para mí.

Actualizaré esto si encuentro una mejor manera.

    
respondido por el Dwayne Charrington 15.03.2013 - 05:58
0

Si usas este código:

$wp_customize->add_setting('mytheme[mytext]', array(
    'default'        => 'some value you want default',
    'capability'     => 'edit_theme_options',
    'type'           => 'option',
));

$wp_customize->add_control('textControl', array(
    'label'      => __('LabelText', 'mytheme'),
    'section'    => 'parameters_thrive',
    'settings'   => 'mytheme[mytext]',  ));

Puedes recuperar el valor simplemente ejecutando get_option('mytheme')['mytext']

    
respondido por el Pablo Ezequiel Leone 18.09.2017 - 17:53

Lea otras preguntas en las etiquetas