Eu pensei que estava facilitando minha vida e tendo consciência do futuro, salvando algum conteúdo como bits de JSON nos campos personalizados post_meta. Infelizmente, o WordPress não concorda e está tornando minha vida incrivelmente difícil.
Eu tenho uma string JSON que se parece essencialmente com isso. Isso é apenas um pouco, e a sequência de comentários é apenas algumas entidades unicode fictícias. A coisa toda é gerada com json_encode .
{
"0": {
"name": "Chris",
"url": "testdomain.com",
"comment": "\u00a5 \u00b7 \u00a3 \u00b7 \u20ac \u00b7 \u00b7 \u00a2 \u00b7 \u20a1 \u00b7 \u20a2 \u00b7 \u20a3 \u00b7 \u20a4 \u00b7 \u20a5 \u00b7 \u20a6 \u00b7 \u20a7 \u00b7 \u20a8 \u00b7 \u20a9 \u00b7 \u20aa \u00b7 \u20ab \u00b7 \u20ad \u00b7 \u20ae \u00b7 \u20af \u00b7 \u20b9"
}
}
Infelizmente, depois que eu o salvo update_post_meta
, ele sai assim:
{
"0": {
"name": "Chris",
"url": "testdomain.com",
"comment": "u00a5 u00b7 u00a3 u00b7 u20ac u00b7 u00b7 u00a2 u00b7 u20a1 u00b7 u20a2 u00b7 u20a3 u00b7 u20a4 u00b7 u20a5 u00b7 u20a6 u00b7 u20a7 u00b7 u20a8 u00b7 u20a9 u00b7 u20aa u00b7 u20ab u00b7 u20ad u00b7 u20ae u00b7 u20af u00b7 u20b9"
}
}
E com as barras cortadas, não é possível json_decode
voltar ao conteúdo útil.
Alguma idéia de por que o WordPress pode estar fazendo isso, e se existe uma maneira de evitá-lo? Não posso usar o sinalizador JSON_UNESCAPED_UNICODE porque esta é uma instalação do PHP 5.3.x e já tentei codificar htmlentities
antes da passagem do conteúdo json_encode
, mas que captura apenas um pequeno subconjunto de entidades UTF-8.
Desde já, obrigado!
(EDIT: FWIW, eu sei que eu poderia salvar uma matriz diretamente no post_meta e seria serializada e a mágica aconteceria, mas eu apenas gosto da ideia de ter os dados armazenados como JSON. Se não houver uma solução fácil e elegante vou caverna, mas eu estou muito esperando lá é uma solução fácil, elegante!)
Existe uma maneira elegante de lidar com isso!
Passe a string codificada em JSON
wp_slash()
. Essa função escapará da barra inicial de cada caractere unicode codificado, o que impedirá suaupdate_metadata()
remoção.fonte
Você pode trapacear no wordpress com algo assim:
Esta é a solução fácil * elegante * ...
fonte
Esta função faz a transformação usando preg_replace:
Antes de cada sequência "uXXXX" (X = 0..F, hexadecimal), ela adiciona barra invertida. Antes de enviar para o DB, chame esta função.
fonte
Uma maneira interessante de contornar isso é codificar para base64, veja o exemplo abaixo.
fonte
Para quem ainda está lutando para salvar uma string unicode codificada por json via wp_update_post , o seguinte funcionou para mim. Encontrado em class-wp-rest-posts-controller.php
Aqui está um exemplo:
fonte
Você pode usar a função stripslashes_deep () do WordPress.
Para referência visite aqui
fonte
BARBJANE's
ainda é enviada a partir do WordPress comoBARBJANE\'s
a menos que eu estou faltando alguma coisa aqui ...