web-dev-qa-db-ja.com

wp_insert_post()によって作成されたカスタム投稿のpolylang翻訳

私は困っています。私は旅行サイトを持っています...私はユーザーが彼らの家を挿入するためのフォームを書くことができるページを作成しました。

家はもちろんカスタムポストタイプです。

これは私のコードの一部です:

...
some validation here

if ($idarticolo = wp_insert_post($post)) {

    //lingua
    global $polylang;
    $lang = pll_current_language();
    $polylang->set_post_language($idarticolo, $lang);

    ...

家は私の現在の言語で挿入されています。しかし、私は管理者パネルからこの記事を翻訳しようとすると、私はエラーが出ます。

投稿は翻訳されておらず、言語は検出されません。

助けてください!!! ...事前にどうもありがとう!

M. :)

1
Mauro

どうやらPolylangは文書化されていないpll_save_post APIメソッドを持っています。ここを参照してください: https://wordpress.org/support/topic/programmatic-set-post-language-and-translations

1
RiaanP

Ok Riaan、

お返事ありがとうございます。

私はこのようにして解決しました(おそらく役に立つかもしれません):

if ($idarticolo = wp_insert_post($post, true)) {

    // inserisco l'articolo nelle altre lingue: En Es Fr
    $idarticoloEn = wp_insert_post($post, true);
    $idarticoloEs = wp_insert_post($post, true);
    $idarticoloFr = wp_insert_post($post, true);

    $polylang->model->set_post_language($idarticolo, 'it');
    $polylang->model->set_post_language($idarticoloEn, 'en');
    $polylang->model->set_post_language($idarticoloEs, 'es');
    $polylang->model->set_post_language($idarticoloFr, 'fr');

    $polylang->model->save_translations('post', $idarticolo, array('en' => $idarticoloEn));
    $polylang->model->save_translations('post', $idarticolo, array('es' => $idarticoloEs));
    $polylang->model->save_translations('post', $idarticolo, array('fr' => $idarticoloFr));

私はイタリア語で投稿を挿入してから、他の言語で対応する翻訳を作成します。

ご協力ありがとうございます。

母:)

1
Mauro

@ Mauro's answer ベースのPolylangバージョン2.5.3を更新。

....
    if ($idarticolo = wp_insert_post($post, true)) {
        $posts = array(
            'en' => '',
            'es' => '',
            'fr' => '',
        );

        // inserisco l'articolo nelle altre lingue: En Es Fr
        foreach ($posts as $language => $value) {
            $posts[$language] = wp_insert_post($post, true);
        }

        if (function_exists('pll_set_post_language') 
            && function_exists('pll_save_post_translations')) {

            pll_set_post_language($idarticolo, 'it');
            foreach ($posts as $language => $value) {
                pll_set_post_language($value, $language);
            }

            pll_save_post_translations(array_merge(array($idarticolo), $posts));
        }
....

言語を設定するにはpll_set_term_languageを使います。

用語の翻訳を保存するにはpll_save_term_translationsを使います。

0
Hanafi