• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как автоматически синхронизировать записи произвольного типа с плагином Polylang?

Delirium_Tremens

Новичок
Добрый день! Мне нужно автоматически синхронизировать произвольные типы записей, размещенные пользователями, с помощью плагина Polylang. Вот тут я нашел решение для простых записей. Как сделать так же для произвольных? Можно ли поправить код ниже или нужно как-то хитрее действовать?

На всякий случай продублирую найденный код, чтобы вам по ссылке не ходить:

Код:
function auto_translate($post_id, $post, $update)

{

    if (!$update) {

        return;

    }



    // prevent creation of additional duplicate draft posts

    if ( $post->post_status == 'draft' ){

        return;

    }



    // prevent recursion when publishing translations

    remove_action('save_post', 'auto_translate', 999, 3);



    global $polylang;

    $langs = ['en', 'he', 'ru'];

    $current_translations = pll_get_post_translations($post_id);

    $post_type = get_post_type($post_id);

  

    if ($post_type == 'post') {

        foreach ($langs as $lang) {

            if (!isset($current_translations[$lang])) {

                $polylang->sync_post_model->copy_post($post_id, $lang, true);

            }

        }

    }

}



// needs low priority or the synchronisation option wont be saved

add_action('save_post', 'auto_translate', 999, 3);
 

ADv

Гуру
Местный
Добрый день! Мне нужно автоматически синхронизировать произвольные типы записей, размещенные пользователями, с помощью плагина Polylang. Вот тут я нашел решение для простых записей. Как сделать так же для произвольных? Можно ли поправить код ниже или нужно как-то хитрее действовать?

На всякий случай продублирую найденный код, чтобы вам по ссылке не ходить:

Код:
function auto_translate($post_id, $post, $update)

{

    if (!$update) {

        return;

    }



    // prevent creation of additional duplicate draft posts

    if ( $post->post_status == 'draft' ){

        return;

    }



    // prevent recursion when publishing translations

    remove_action('save_post', 'auto_translate', 999, 3);



    global $polylang;

    $langs = ['en', 'he', 'ru'];

    $current_translations = pll_get_post_translations($post_id);

    $post_type = get_post_type($post_id);

 

    if ($post_type == 'post') {

        foreach ($langs as $lang) {

            if (!isset($current_translations[$lang])) {

                $polylang->sync_post_model->copy_post($post_id, $lang, true);

            }

        }

    }

}



// needs low priority or the synchronisation option wont be saved

add_action('save_post', 'auto_translate', 999, 3);
PHP:
if ($post_type == 'post') {
в коде выше в этом месте задается тип записи, post - блоговые записи. Пробуйте изменить на свой.
 

Delirium_Tremens

Новичок
Спасибо, сработало! Еще два вопроса:
1. Как указать несколько типов записей?
2. Почему-то срабатывает только при создании нужной записи в админке. Как длобавить условие, чтобы и из фронтенда работало?

PHP:
if ($post_type == 'post') {
в коде выше в этом месте задается тип записи, post - блоговые записи. Пробуйте изменить на свой.
 
Сверху Снизу