Emita com get_theme_mod retornando um valor em branco em vez do valor salvo

Eu tenho o que parece ser um problema bastante problemático com a function get_theme_mod na última versão do WordPress. Somente em servidores específicos (dos quais cumprem todos os requisitos do WordPress), a function não retornará o valor salvo que eu possa ver armazenado no database. No entanto, se eu especificar um valor padrão para a function, ele sempre retornará o valor padrão do segundo argumento.

Estou realmente perdendo porque os servidores estão executando o PHP 5.3 e mais do que as versões MySQL necessárias. Todos os ambientes são PHP e Apache sem nada na frente ou no meio. Isso não parece ser um erro consistente, é apenas em servidores específicos, o que parece estar acontecendo.

Estou utilizando a API de personalização do tema do WordPress no meu projeto e, nos servidores ofensivos, percebi as seguintes coisas:

  • Ao fazer alterações no painel de visualização da API de personalização do tema, eles são refletidos. No entanto, navegando para uma parte diferente do site no painel de visualização (clicando em um link ou qualquer outro) e retornará ao seu valor padrão. Hitting refresh também define tudo de volta aos seus valores padrão.
  • A inspeção da solicitação AJAX por meio da guia “Rede” da Ferramenta de desenvolvimento do Chrome mostra que os dados estão sendo enviados corretamente e o servidor está enviando de volta um código de resposta de 200 insinuando que tudo está bem.
  • Inspecionar a linha apropriada da tabela do database que armazena os dados serializados que foram salvos mostra que ele está de fato sendo salvo corretamente, mas ao usar a function get_theme_mod (), não é retornado.
  • Eu tentei despejar o conteúdo da function “Get_theme_mods ()” para ver o que iria retornar e eu não recebo nada (absolutamente nada é retornado). Fazendo isso em um servidor funcionando no entanto, retorna os conteúdos apropriados.
  • Todos os valores da API de Personalização do Tema são definidos conforme a documentação sugere e até tentei definir o tipo de configuração para “theme_mod” sem sucesso (mesmo que theme_mod seja o padrão de qualquer maneira).
  • Ao tentar chamar o get_theme_mod () se eu adicionar um set_theme_mod antes da chamada de function e definir um valor manualmente, ele salva e a function get_theme_mod obtém o valor salvo antes. Isso significa que as mudanças parecem estar agindo como se estivessem temporariamente sendo salvas (mesmo que o database diga o contrário).

Eu também não tenho plugins instalados ou ativados que possam sobrescrever qualquer uma das opções do tema ou impedindo que elas sejam retornadas. Minha única conclusão é que ele se relaciona com algum tipo de cache de nível de hospedagem na web (APC talvez) ou talvez o WordPress em si, armazenando em cache as opções (presumo get_theme_mod) é armazenado em cache, como a function get_option está em outro lugar.

Se você precisar de algum código, deixe-me saber o que você precisa (como não tenho certeza).

Editar **

Eu fiz um var_dump sobre o conteúdo das funções get_theme_mod sendo chamado e obteve o seguinte (fez isso para alguns, nem todos). Os labels na frente com o cólon são para mostrar o valor que é o que.

Texture: string(4) "none" Background Color: string(0) "" Theme Color: string(7) "#FF0000" Body Font: string(0) "" Heading Font: string(0) "" 

Por causa da frustração, tentei o seguinte código e nada é retornado:

 $options = get_option("theme_mods_aphrodite"); var_dump($options); 

O resultado obtido com isso é bool (falso).

Outra coisa que eu tentei foi usar o customizável padrão Twenty Twelve e funcionou, então algo em algum lugar do meu tema está destruindo a linha de opções e impedindo que ele funcione. Mas o que faz isso estranho é que o tema que eu estou tendo problemas com trabalhos principalmente bom em outros servidores que eu tente, são apenas incidentes isolados particulares e a tabela de database está em tato.

Editar # 2 **

Conforme sugerido abaixo, coloquei no meu tema o código de personalização em outro tema (eu escolhi Twenty Twelve porque funciona fora da checkbox) e parece que meu código de registro quebra o customiser e não consigo entender por quê.

Solutions Collecting From Web of "Emita com get_theme_mod retornando um valor em branco em vez do valor salvo"

Eu tive o mesmo problema .. usando type=option e, em seguida, get_option din’t work também.

Testando com outro item de opção e funciona .. e teste com MYTHEMENAME_THEME_OPTION sem o suporte para item e obteve uma matriz, então acho que é o caminho certo.

Então, apenas uma dica para quem encontrou esta postagem, mas ainda ganhou valor em branco … quando você usa esse 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]', )); 

então, para obter o trabalho, você precisa usar cada configuração como um 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', )); 

Onde setting = myText , então não é mais uma matriz (antes de wasmytheme[mytext] ) agora é como um único item / valor, uma string. Vá em frente e use a function get_option() para usar o valor que você quiser.

Eu nunca trabalhei por que get_theme_mod não funcionou, no entanto, encontrei uma pequena correção habilidosa para resolver esse bug irritante, caso alguém se encontre em uma situação semelhante.

Você deve alterar todas as suas configurações para digitar => ‘opção’ e então você não pode mais usar get_theme_mod mais e, em vez disso, precisa usar get_option (tanto quanto eu sei). Uma busca e substituição em get_theme_mod para get_option não deve doer. Funcionou para mim.

Vou atualizar isso se encontrar uma maneira melhor.

Se você usar 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]', )); 

Você pode recuperar o valor apenas executando get_option('mytheme')['mytext']