Pular a navegação

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.

Nenhum atendente de suporte está disponível para trabalhar hoje no fórum Portuguese. Fique à vontade para abrir tickets e iremos tratar deles assim que estivermos online. Obrigado pela compreensão.

Este tópico contém 5 respostas, tem 2 vozes.

Última atualização: Mateus Getulio 1 ano, 8 mes atrás.

Assistido por: Mateus Getulio.

Autor Posts
setembro 9, 2022 em 3:11 pm

luisM-61

As taxonomias existentes continuam a nao aparecer nos posts de linguas traduzidas

setembro 9, 2022 em 4:06 pm
setembro 9, 2022 em 8:54 pm #12024953

Mateus Getulio
Supporter

Idiomas: Inglês (English ) Português (Português )

Fuso horário: America/Sao_Paulo (GMT-03:00)

Olá novamente Luis,

Verifiquei outra vez o problema, mas até agora não consegui encontrar uma solução. Pedi aos meus colegas que dessem uma olhada para ver se existe uma solução que possamos testar.

Volto aqui assim que um deles me responder (o que não deve demorar). Agradecemos de antemão por sua paciência!

Cumprimentos,
Mateus.

setembro 12, 2022 em 2:02 pm #12034817

Mateus Getulio
Supporter

Idiomas: Inglês (English ) Português (Português )

Fuso horário: America/Sao_Paulo (GMT-03:00)

Bom dia Luis,

Obrigado pela sua paciência.

Você poderia gentilmente nos mostrar qual é o passo a passo exato para replicar este problema? Ou seja, como exatamente os códigos da API são usados para realizar as traduções e associações de taxonomias do conteúdo.

É de suma importância saber este fluxo de trabalho para que possamos conseguir replicar o bug em nossos ambientes de testes e possivelmente achar uma solução.

Aguardo seu feedback. Obrigado!

setembro 12, 2022 em 2:33 pm #12035239

luisM-61

Bom dia Mateus,

Esta é a função que trata do envio da informação da nossa API para a criação de um post no WP. A função cria um post novo em cada lingua com o titulo e campos personalizados.

function apiCreateEventsWithPredictionsApiRangeDate($startDate = null, $endDate = null)
{
    UnauthorizedRequestMiddleware::check();
    $helpers = new Helpers();

    $TIPS_WPML = [
        'en' => 'en',
        'pt' => 'pt-pt',
        'pt-br' => 'pt-br',
        'es' => 'es',
        'fr' => 'fr',
        'de' => 'de',

    ];

    $fixtures = getFixturesByDateFromPredictionsApi($startDate, $endDate);

    if (empty($fixtures)) {
        exit(json_encode(['message' => 'No data!']));
    }

    $postsMetas = [];

    /**
     * Get the existent posts and later we can avoid duplicated posts
     */
    $postsMetas = $helpers->returnPostExists();

    foreach ($fixtures as $fixture) {

        $fixtureMetaForComparison = [
            'hometeam' => $fixture['localTeam']['data']['name'],
            'awayteam' => $fixture['visitorTeam']['data']['name'],
            'datetime' => $fixture['time']['starting_at']['date_time'],
        ];

        if (!in_array($fixtureMetaForComparison, $postsMetas)) {
            $onlyNecessaryFixtures[] = $fixture;
        }
    }

    if (empty($onlyNecessaryFixtures)) {
        exit(json_encode(['message' => 'There is no new game to add!']));
    }

    foreach ($onlyNecessaryFixtures as $fixture) {

        $fixtureGuess = $fixture['language']['pt']['predictionGuess']['guess'];
        $fixtureGuessText = $fixture['language']['pt']['predictionGuess']['render'];


        $fixtureGuessOdd = $fixture['odd_guess'][0];

        $fixtureMetaForComparison = [
            'hometeam' => $fixture['localTeam']['data']['name'],
            'awayteam' => $fixture['visitorTeam']['data']['name'],
            'datetime' => $fixture['time']['starting_at']['date_time'],
        ];

        if (in_array($fixtureMetaForComparison, $postsMetas)) {
            continue;
        }

        $postId = wp_insert_post([
            'post_title' => ucfirst($fixture['localTeam']['data']['name']) . ' x ' . ucfirst($fixture['visitorTeam']['data']['name']),
            'post_type' => 'all_events',
            'post_content' => '',
            'post_author'    => 0,
            'post_status' => 'publish',
            'meta_input' => [
                'hometeam'          => $fixture['localTeam']['data']['name'],
                'awayteam'          => $fixture['visitorTeam']['data']['name'],
                'tip'               => $fixture['language']['pt']['prediction'],
                'competition_id'    => $fixture['league_id'],
                'competition_name'  => $fixture['league']['data']['name'],
                'datetime'          => $fixture['time']['starting_at']['date_time'],
                'topics'            => $helpers->fromArrayToLiHTML($fixture['language']['pt']['topics']),
                'prediction_guess'  => $fixtureGuess,
                'prediction_text'   => $fixtureGuessText,
                'odd_guess'         => $fixtureGuessOdd,

                'stadium_name'      => $fixture['stadium'],
                'prob_home_victory' => $fixture['probability']['home'],
                'prob_away_victory' => $fixture['probability']['away'],
                'prob_draw'         => $fixture['probability']['draw'],
                'prob_btts'         => $fixture['probability']['btts'],
                'prob_over_2_5'     => $fixture['probability']['over_2_5'],
                'prob_under_2_5'    => $fixture['probability']['under_2_5'],
                'prob_over_3_5'     => $fixture['probability']['over_3_5'],
                'prob_under_3_5'    => $fixture['probability']['under_3_5'],

                'odds_home_victory' => $fixture['odds']['home'][0],
                'odds_away_victory' => $fixture['odds']['away'][0],
                'odds_draw'         => $fixture['odds']['draw'][0],
                'odds_btts'         => $fixture['probability']['btts'] >= 50 ? $fixture['odds']['btts']['yes'][0] : $fixture['odds']['btts']['no'][0],
                'odds_over_2_5'     => $fixture['odds']['over_2_5'][0],
                'odds_under_2_5'    => $fixture['odds']['under_2_5'][0],
                'odds_over_3_5'     => $fixture['odds']['over_3_5'][0],
                'odds_under_3_5'    => $fixture['odds']['under_3_5'][0],
                'odds_btts_yes'     => $fixture['odds']['btts']['yes'][0],
                'odds_btts_no'      => $fixture['odds']['btts']['no'][0],
            ],
        ]);

        $helpers->saveImageToStorage($postId, $fixture['league_id'], 'hometeam_logo',    $fixture['localTeam']['data']['logo_path'], $fixture['localTeam']['data']['name']);
        $helpers->saveImageToStorage($postId, $fixture['league_id'], 'awayteam_logo',    $fixture['visitorTeam']['data']['logo_path'],    $fixture['visitorTeam']['data']['name']);
        $helpers->saveImageToStorage($postId, $fixture['league_id'], 'competition_logo', $fixture['league']['data']['logo_path']);
        $helpers->updatePostImageEventTerms($fixture['league']['data']['country']['data']['name'], $fixture['league']['data']['name'], $postId);


        foreach ($fixture['language'] as $keylang => $contentLang) {

            if ($keylang === 'pt') {
                continue;
            }

            $twinPostId = duplicateThePost($postId);

            update_field('tip', $contentLang['prediction'], $twinPostId);
            update_field('topics', $helpers->fromArrayToLiHTML($contentLang['topics']), $twinPostId);
            update_field('prediction_text', $fixtureGuessText, $twinPostId);

            $postsIdsForConnect = [
                'original' => $postId,
                'translation' => $twinPostId,
            ];
            WpmlHelper::connectOriginalPostWithTranslatedPost($postsIdsForConnect, $TIPS_WPML[$keylang], 'all_events');
        }
    }

    return rest_ensure_response([
        'message' => 'Posts successfully created!',
    ]);
}

Depois temos esta funcão que trata de ligar os varios posts criados ao post da lingua principal do site

 public static function connectOriginalPostWithTranslatedPost($insertedPostIds = [], $languageCode = 'en', $elementType = null)
    {
        if (! empty($insertedPostIds)) {
            // $insertedPostIds = my_insert_posts();
        }
        
        if ($elementType == null) {
            $elementType = 'post';
        }
     
        if ($insertedPostIds) {
            // https://wpml.org/wpml-hook/wpml_element_type/
            $wpmlElementType = apply_filters( 'wpml_element_type', $elementType);
             
            // get the language info of the original post
            // https://wpml.org/wpml-hook/wpml_element_language_details/
            $getLanguageArgs = array('element_id' => $insertedPostIds['original'], 'element_type' => 'post' );
            $originalPostLanguageInfo = apply_filters( 'wpml_element_language_details', null, $getLanguageArgs);
             
            $setLanguageArgs = array(
                'element_id'    => $insertedPostIds['translation'],
                'element_type'  => $wpmlElementType,
                'trid'   => $originalPostLanguageInfo->trid,
                'language_code'   => $languageCode,
                'source_language_code' => $originalPostLanguageInfo->language_code
            );
     
            do_action( 'wpml_set_element_language_details', $setLanguageArgs );
        }
    }
setembro 12, 2022 em 8:00 pm #12037441

Mateus Getulio
Supporter

Idiomas: Inglês (English ) Português (Português )

Fuso horário: America/Sao_Paulo (GMT-03:00)

Olá,

Encaminhei este tíquete para nosso 2º nível de suporte, onde nossos especialistas de 2º nível analisarão mais profundamente esse problema e tentarão encontrar uma solução.

Entrarei em contato com você assim que tiver uma resposta deles. Grato!

Atenciosamente,
Mateus

setembro 13, 2022 em 7:27 pm #12046483

Mateus Getulio
Supporter

Idiomas: Inglês (English ) Português (Português )

Fuso horário: America/Sao_Paulo (GMT-03:00)

Oi Luís,

Grato novamente pela sua paciência.

Após analisarmos melhor a questão deste ticket, concluímos que uma abordagem que possivelmente funcione seria tentar implementar no código da função API este nosso hook: https://wpml.org/wpml-hook/wpml_object_id/, ao atribuir o ID do termo, para que possamos descartar que se atribua o ID do termo errado.

No entanto, para todos os efeitos, seria necessário configurar a API com algumas customizações de código. Como foi frisado anteriormente, receio que esta tarefa esteja além do escopo deste fórum de suporte. Neste caso, o que recomendamos é que você verifique nossa página de desenvolvedores parceiros, a fim de conseguir ajuda especializada para seu projeto: https://wpml.org/contractors/.

Espero que as informações acima lhe sejam úteis. Se precisar de mais ajuda com nossos produtos, não hesite em contactar-nos.

Grato,
Mateus.

Este tíquete está fechado. Se você for um cliente WPML e precisar de ajuda relacionada, abra um novo tíquete de suporte.