Skip Navigation

This thread is resolved. Here is a description of the problem and solution.

Problema: Passando a requisição de AJAX, não é possível recuperar a informação no idioma secundário.

Solução: Nesse ticket o cliente estava usando um código personalizado para fazer as requisições do AJAX. Ele estava usando uma URL apontando para o idioma padrão e isso pode ter causado o problema.

Se você está usando um código personalizado para o ajax, esteja certo que:

1. O código do idioma está sendo enviado junto com a requisição do AJAX 2. Esteja certo que o código do idioma está sendo usado no PHP 3. Em WPML > Idiomas > Language filtering for AJAX operations, essa opção está ativada 4. Se possível, tente usar o formato de AJAX recomendado pelo próprio WordPress, que pode ser visto na documentação abaixo.

Documentação Relevante: https://codex.wordpress.org/AJAX_in_Plugins

Este é o fórum de suporte técnico para o WPML — o plugin de WordPress multilíngue.

Todos podem ler, mas apenas clientes do WPML podem postar aqui. A equipe do WPML responde no fórum 6 dias por semana, 22 horas por dia.

Autor Posts
agosto 7, 2017 às 11:17 am #1336328

Softexpert software S.A.

Infelizmente nao consigo liberar para fazer uma copia, tem como você acessar minha maquina remotamente? Via Team View, ou skype e verificar isso? Preciso muito da solução, não sei o que fazer.

agosto 7, 2017 às 12:05 pm #1336385

Softexpert software S.A.

Ele está pegando o language_code dessa função:

agosto 7, 2017 às 1:54 pm #1336525

Bruno

Olá,

Infelizmente a única maneira de eu verificar isso seria com o Duplicator.

Isso não deve ser um problema com o WPML. Isso deve ser um problema com o código personalizado que você está criando em alguma outra parte.

Uma coisa que pode estar acontecendo, mas eu não estou certo, é que no JS você está usando "data-siteurl" para pegar a URL do blog. Isso está usando sempre a URL padrão (em português).

Esse atributo usa apenas a URL em português e depois adiciona o "/ajax-posts/" na URL. Novamente, nenhum código de idioma está sendo passado aqui. Eu não sei como o "/ajax-posts/" funciona. Eu não sei se isso é um plugin, se isso é uma URL personalizada (custom permalinks). Idealmente, caso seja possível, você deveria usar o admin-ajax.php do WordPress: https://codex.wordpress.org/AJAX_in_Plugins

Também, você pode tentar passar o código do idioma nos dados que está fazendo a requisição:

data : {'pagetoload' : page+1, 'cat_ID' : cat_id},

apenas como teste, troca para:

data : {'pagetoload' : page+1, 'cat_ID' : cat_id, 'lang': 'en' },

Note o "lang". E veja se isso funciona. Se sim, então você vai precisar capturar o idioma atual para usar na requisição também.

Ou, se a página "/ajax-posts/" for código personalizado, talvez você tenha que criar uma personalização para funcionar com o código do idioma na URL, por exemplo: blog.softexpert.com/en/ajax-posts/.

Obrigado.

agosto 7, 2017 às 2:06 pm #1336538

Softexpert software S.A.

O ajax post é esse script, conforme no print abaixo. Ele é que monta o Array que te mandei nos comentarios acima. Pode me ajudar ainda? Como posso fazer essa alteração? Não estou conseguindo.

O ajax-posts está montando este array:

WP_Query Object ( [query] => Array ( [posts_per_page] => 4 [cat] => 1 [paged] => 1 [post_type] => post ) [query_vars] => Array ( [posts_per_page] => 4 [cat] => 1 [paged] => 1 [post_type] => post [error] => [m] => [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [category_name] => [tag] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [title] => [fields] => [menu_order] => [embed] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [post_name__in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC ) [tax_query] => WP_Tax_Query Object ( [queries] => Array ( [0] => Array ( [taxonomy] => category [terms] => Array ( [0] => 1 ) [field] => term_id [operator] => IN [include_children] => 1 ) ) [relation] => AND [table_aliases:protected] => Array ( ) [queried_terms] => Array ( [category] => Array ( [terms] => Array ( [0] => 1 ) [field] => term_id ) ) [primary_table] => wp_posts [primary_id_column] => ID ) [meta_query] => WP_Meta_Query Object ( [queries] => Array ( ) [relation] => [meta_table] => [meta_id_column] => [primary_table] => [primary_id_column] => [table_aliases:protected] => Array ( ) [clauses:protected] => Array ( ) [has_or_relation:protected] => ) [date_query] => [request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_icl_translations t ON wp_posts.ID = t.element_id AND t.element_type = CONCAT('post_', wp_posts.post_type) WHERE 1=1 AND ( 0 = 1 ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') AND ( ( t.language_code = 'pt-br' AND wp_posts.post_type IN ('post','page' ) ) OR wp_posts.post_type NOT IN ('post','page' ) ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 4 [posts] => Array ( ) [post_count] => 0 [current_post] => -1 [in_the_loop] => [comment_count] => 0 [current_comment] => -1 [found_posts] => 0 [max_num_pages] => 0 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => 1 [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => 1 [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => [is_404] => [is_embed] => [is_paged] => [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_posts_page] => [is_post_type_archive] => [query_vars_hash:WP_Query:private] => 65673cd034901027ba4a261f6ff18962 [query_vars_changed:WP_Query:private] => [thumbnails_cached] => [stopwords:WP_Query:private] => [compat_fields:WP_Query:private] => Array ( [0] => query_vars_hash [1] => query_vars_changed ) [compat_methods:WP_Query:private] => Array ( [0] => init_query_flags [1] => parse_tax_query ) )

agosto 7, 2017 às 2:12 pm #1336549

Softexpert software S.A.

Verifique que no array que estou te mandando no SELECT que tem ali, ele está setado: t.language_code = 'pt-br'

agosto 7, 2017 às 2:18 pm #1336563

Bruno

Essa query pode estar retornando em pt-br porque você está usando a URL padrão (em português) e não está usando nenhum argumento no JS para indicar que isso é uma página em inglês. Você tentou seguir o teste que eu postei acima para adicionar o código do idioma na URL e/ou no JS para testar?

Isso é importante para saber se o resultado vai ser retornado corretamente. Caso contrário, você pode tentar fazer a mesma implementação, usando o admin-ajax.php, que é recomendado pelo WordPress: https://codex.wordpress.org/AJAX_in_Plugins

Obrigado.

agosto 7, 2017 às 2:20 pm #1336568

Softexpert software S.A.

Tentei fazer o código que você me enviou, mas não funcionou... Esse admin-ajax do wordpress eu coloco no lugar de ajax-posts?

agosto 7, 2017 às 2:21 pm #1336570

Softexpert software S.A.

Que código exatamente eu posso implementar?

agosto 7, 2017 às 2:25 pm #1336574

Softexpert software S.A.

Eu posso te enviar o blog por email ou anexar em algum lugar para você fazer o teste?

agosto 7, 2017 às 3:35 pm #1336660

Bruno

A implementação do admin-ajax.php é explicando na documentação que eu postei acima. Você vai precisar apenas adicionar uma action no ajax do jquery e usar um filtro para recuperar as informações enviadas via ajax.

Você pode adicionar os arquivos do site no Dropbox, Google Drive ou usar o WeTransfer, que deve funcionar corretamente.

Por favor, note que é necessário incluir os arquivos e o banco de dados. A pasta wp-content/uploads (que tem os arquivos de imagens), não é necessário. Você pode filtrar essa pasta para o arquivo ficar menor, caso você queira.

A sua próxima resposta vai ser privada.

Obrigado.