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

4

Eu tenho o que parece ser um problema bastante preocupante com a função get_theme_mod na versão mais recente do Wordpress. Somente em servidores específicos (dos quais atendem a todos os requisitos do Wordpress) a função não retornará o valor salvo que eu posso ver armazenado no banco de dados. No entanto, se eu especificar um valor padrão para a função, ele sempre retornará o valor padrão do segundo argumento.

Estou realmente perdido porque os servidores estão todos executando o PHP 5.3 e mais do que as versões necessárias do MySQL. 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 particulares que isso parece estar acontecendo.

Estou utilizando a API de personalização de temas do Wordpress em meu projeto e os servidores ofensivos notaram o seguinte:

  • Ao fazer alterações no painel de visualização da API de personalização de temas, elas são refletidas. No entanto, navegue para uma parte diferente do site no painel de visualização (clicando em um link ou algo mais) e ele retornará ao valor padrão. Atingir a atualização também define tudo de volta para seus valores padrão.
  • Inspeção da solicitação do AJAX por meio das Ferramentas do desenvolvedor do Google Chrome A guia "Rede" 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 da tabela de banco de dados apropriada que armazena os dados serializados que foram salvos mostra que ela está sendo de fato salva corretamente, mas ao usar a função get_theme_mod () ela não é retornada.
  • Eu tentei descarregar o conteúdo da função "Get_theme_mods ()" para ver o que ele retornaria e não recebo nada (absolutamente nada é retornado). Fazer isso em um servidor de trabalho, no entanto, retorna o conteúdo apropriado.
  • Todos os valores da API de personalização de temas são definidos de acordo com a documentação sugerida e eu até tentei definir o tipo de configuração como "theme_mod" sem sucesso (mesmo que theme_mod seja o padrão).
  • Ao tentar chamar o método get_theme_mod () se eu adicionar um set_theme_mod antes da chamada de função e definir um valor manualmente, ele salva e a função get_theme_mod obtém o valor salvo logo antes. Isso significa que as mudanças parecem estar agindo como se estivessem apenas temporariamente sendo salvas (embora o DB diga o contrário).

Eu também não tenho nenhum plug-in instalado ou ativado que possa estar sobrescrevendo qualquer uma das opções do tema ou impedindo que elas sejam retornadas. Minha única conclusão é que isso se relaciona com algum tipo de cache no nível do host (talvez APC) ou talvez o próprio Wordpress armazenando em cache as opções (presumo que get_theme_mod) seja armazenado em cache muito parecido com a função get_option 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 no conteúdo das funções get_theme_mod sendo chamadas e obtive o seguinte (fiz isso para algumas, não para todas). Os rótulos na frente com os dois pontos são para mostrar qual é o valor.

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

Fora de frustração eu tentei o código a seguir também e nada é retornado:

$options = get_option("theme_mods_aphrodite");

var_dump($options);

O resultado que recebo é bool (false).

Outra coisa que eu tentei foi usar o customizador de temas Twenty Twelve padrão e funcionou, então algo em algum lugar do meu tema está destruindo a linha de opções e impedindo que ela funcione. Mas o que torna isso estranho é que o tema que estou tendo problemas funciona muito bem em outros servidores que eu tento, são apenas incidentes isolados particulares e a tabela de banco de dados está intacta.

Editar # 2 **

Como sugerido abaixo, colei o código de personalização do meu tema em outro tema (selecionei Twenty Twelve porque funciona imediatamente) e parece que meu código de registro quebra o personalizador e não consigo descobrir o porquê.

    
por Dwayne Charrington 15.03.2013 / 01:23

3 respostas

3

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

Teste com outro item de opção e funciona .. e teste com MYTHEMENAME_THEME_OPTION sem o colchete para item e recebi um Array, então acho que é o caminho certo.

Então, apenas uma dica para quem encontrou este post, mas ainda tem valor em branco .. quando você 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]',  ));

para obter 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 função get_option() para usar o valor que você quiser.

    
por user39067 06.10.2013 / 03:43
2

Eu nunca descobri por que get_theme_mod não funcionou, mas eu encontrei uma pequena correção para resolver esse bug irritante em caso de alguém se encontrar em uma situação semelhante.

Você precisa alterar todas as configurações para digitar = > 'opção' e então você não pode mais usar get_theme_mod mais e em vez disso tem que usar get_option (tanto quanto eu sei). Uma localização e substituição em get_theme_mod para get_option não deve prejudicar. Funcionou para mim.

Vou atualizar isso se encontrar uma maneira melhor.

    
por Dwayne Charrington 15.03.2013 / 05:58
0

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']

    
por Pablo Ezequiel Leone 18.09.2017 / 17:53