Bachi início do ano: WordPress e WPML get_page_by_path update ()

O ano de 2012 começou com algumas horas de profunda depuração por causa de dois (conhecido) incomoda muito chato. , con la globale (e famosa) omonima istanza $wpdb . A primeira, entre outras coisas bastante datada, presentes no núcleo de WordPress que se relaciona com o método de update() da classe wpdb , com o global (e popular) instância homónimo $wpdb . O defeito aparece quando você tenta atualizar um campo para NULL . Apesar de inúmeras queixas, a equipe de desenvolvimento do WordPress não parece encontrar solução para o problema chato. Na verdade, até à data, a única solução é escrever o SQL para a sua conta.

Houve um tempo quando eu pensei que havia trabalhado em torno do problema, o método incluindo passando a matriz com a lista de tipos de campo, digite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
array ( $ Valores = matriz (
'prova' , 'Name' => 'teste',
null "Date_start '=> null
);

array ( $ Formatos = matriz (
'% S',
'NULL'
);

array ( Onde $ = matriz (
5 'Id' => 5
);

update ( 'tablename' , $values , $where , $formats ) ; $ Wpdb -> update ('TableName', $ valores, $ onde, $ formatos);

Desta forma, o SQL que sai é:

1
SET `name` = 'prova' , `date _ start` = NULL WHERE `id` = '' ATUALIZAÇÃO tablename ` setembro 'name' = 'teste', `data` _ start = NULL ONDE `id` =''

Tudo é perfeito, exceto que, quando o estado está perdido! Na prática, "brincar" com a formatação 'NULL' , quebra todo o resto. Passando os formatos para a condição em que:

1
2
3
4
...
array ( '%d' ) ; $ Where_formats = matriz ('% d');

update ( 'tablename' , $values , $where , $formats , $where_formats ) ; $ Wpdb -> update ('TableName', $ valores, $ onde, $ formato, $ where_formats);

Recebemos (eu diria quase pior):

1
SET `name` = 'prova' , `date _ start` = NULL WHERE `id` = 0 ATUALIZAÇÃO tablename ` setembro 'name' = 'teste', `data` _ start = NULL ONDE `id` = 0

Obviamente, é claro que quem está no poder neste jogo é o formato e não o 'date_start' => null . Então a única solução possível é um ataque de força bruta, ou seja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
array ( $ Valores = matriz (
'prova' , 'Name' => 'teste',
null "Date_start '=> null
);

array ( $ Formatos = matriz (
'% S',
'% NNULL'
);

array ( Onde $ = matriz (
5 'Id' => 5
);

array ( '%d' ) ; $ Where_formats = matriz ('% d');

update ( 'tablename' , $values , $where , $formats , $where_formats ) ; $ Wpdb -> update ('TableName', $ valores, $ onde, $ formato, $ where_formats);

Finalmente construir o SQL como você deve:

1
SET `name` = 'prova' , `date _ start` = NULL WHERE `id` = 5 ATUALIZAÇÃO tablename ` setembro 'name' = 'teste', `data` _ start = NULL ONDE `id` = 5

No entanto, eu sou o primeiro a dizer, '%NNULL' não é apenas aceitável, mas é melhor para resolver o impasse escrever a atualização por conta própria.

WPML

Permanecendo no tema WordPress, passamos agora Plugin mão. WPML (WordPress Multi Language) é um plugin WordPress dedicado à localização, ou seja, a gestão de um site multi-idioma. Uma característica, devido à arquitetura da solução que os desenvolvedores adotaram para permitir a gravação e gerenciamento de mensagens em diferentes línguas, é a "rastejar" por meio das ações uso maciço e filtros, baixo nível de funções no WordPress . Isto lhe permite manipular todas as chamadas do núcleo do WordPress, incluindo todos aqueles que têm a ver com o banco de dados (e não apenas alguns).
O problema é que, se algo de errado, saltando em todo o jogo como nós vamos quebrar funções que normalmente não têm absolutamente nenhum erro. Uma delas é get_page_by_path() , WordPress característica histórica e conveniente.
Afectados por WPML, não funciona mais quando o tipo de página que você solicitou não foi "engolido" pelo WPML mesmo.

Páginas, incluindo o tipo de Mensagem Personalizado (CPT), conhecido como "ser traduzido como" no WPML administração backend, funcionam perfeitamente com get_page_by_path() . O defeito é encontrado apenas com as páginas que não estão incluídos - na prática - no quadro icl_translations de WPML.

Por isso, não há solução imediata, uma vez que iria mudar o núcleo do WPML mesmo, o que obviamente não recomendo. No entanto, desde que eu sou um usuário registrado, relatei isso no fórum onde a discussão está em andamento para encontrar a melhor solução (para corrigir o erro na instrução SQL select na minha opinião). Esperamos que a próxima atualização.

No entanto, se você não pode esperar para corrigir, não é um artifício bastante rápido e indolor para superar 'temporariamente' e é o problema - como mencionado acima - para definir o tipo de página como indiciado "traduzir" na WPML backend. Configurações atualizadas. Atualize a página. E colocar de volta - eventualmente - tudo como era antes. Quando a página é "abastecido" na tabela WPML, get_page_by_path() retorna aos negócios de sempre.

No entanto, esperar os patches ...

Não há comentários para este post

Deixe um comentário

TAG XHTML LICENÇAS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> CÓDIGO DE INSERÇÃO:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL 


Pare SOPA