Как объединить рейтинг поста в мультиязычном сайте (Polylang)?

Для объединения рейтинга поста в мультиязычном сайте, использующем плагин Polylang для WordPress, вам понадобится немного кода на PHP.

1. Сначала вам нужно установить и активировать плагин Polylang на своем сайте. После активации плагина вы сможете создавать и управлять мультиязычным контентом.

2. Создайте пользовательское поле (post meta) для хранения рейтинга на каждом посте. Можно использовать функцию add_post_meta(), чтобы добавить это поле к каждому посту при его создании. Например:

function add_rating_field() {
    add_post_meta(get_the_ID(), 'rating', 0, true);
}
add_action('save_post', 'add_rating_field');

Этот код добавит поле 'rating' для каждого поста, и стандартное значение будет 0. Вы можете изменить это значение по умолчанию, если хотите.

3. Затем вам нужно создать пользовательскую функцию, которая будет обновлять рейтинг поста на основе усредненных оценок всех языковых версий этого поста.

function update_post_rating($post_id) {
    $post_languages = pll_languages_list(); // получаем список языковых версий поста
    $total_rating = 0;
    $count = 0;
    
    foreach ($post_languages as $language) {
        $translation_id = pll_get_post($post_id, $language); // получаем ID языковой версии поста
        $rating = get_post_meta($translation_id, 'rating', true); // получаем рейтинг языковой версии поста
        
        if ($rating) {
            $total_rating += $rating;
            $count++;
        }
    }
    
    $average_rating = $count > 0 ? $total_rating / $count : 0; // вычисляем средний рейтинг
    
    update_post_meta($post_id, 'rating', $average_rating); // обновляем рейтинг основной версии поста
}
add_action('save_post', 'update_post_rating');

Этот код получает список языковых версий поста с помощью функции pll_languages_list(). Затем он перебирает все языки и получает ID языковой версии каждого поста с помощью pll_get_post(). Затем он получает рейтинг каждого языкового поста с помощью get_post_meta() и вычисляет средний рейтинг.

Наконец, функция обновляет рейтинг основной версии поста с помощью update_post_meta().

4. Теперь рейтинг каждого поста будет автоматически объединяться из всех языковых версий при сохранении. Вы можете использовать этот рейтинг где угодно на своем сайте, выводя его с помощью функции get_post_meta().

Например:

$post_id = get_the_ID();
$rating = get_post_meta($post_id, 'rating', true);

echo 'Рейтинг поста: ' . $rating;

Или вы можете использовать эту информацию для сортировки постов по рейтингу или отображения настраиваемого стиля в зависимости от значения рейтинга.

Таким образом, вы успешно объединили рейтинг поста при использовании плагина Polylang в PHP.