Перейти к содержимому Перейти к боковой панели

Это форум технической поддержки WPML – плагина для многоязычной WordPress.

Доступно для чтения всем, но только клиенты, купившие WPML, могут оставлять сообщения. Сотрудники WPML отвечают на сообщения форума 6 дней в неделю, 22 часов в сутки.

Помечено: 

Эта тема содержит 5 ответов, имеет 2 voices.

Последнее обновление: Andrey 1 год, 12 месяцев назад.

При содействии: Andrey.

Автор Сообщения
6 ноября, 2023 в 11:26 дп #14736935

Роман Дубровский

Расскажите нам, что вы пытаетесь сделать?
Я вывожу количество постов и хотелось бы, чтобы выводило кол-во постов определенного языка. Сейчас выводит общее количество ( на Укр языке 1 запись и на Рус языке ) и по итогу показывается "2", хотя нужно "1"

Ссылка на ваш сайт?
скрытая ссылка

Кейсы - welldone - Google Chrome.png
6 ноября, 2023 в 12:03 пп #14737359

Andrey
Сторонник WPML с 06/2013

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

Вам необходимо добавить дополнительный аргумент 'suppress_filters' => false в Ваш wp_query($args).

Больше информации: https://wpml.org/documentation/support/debugging-theme-compatibility/#issue-wp_queryargs-or-get_postsargs-doesnt-filter-out-correct-posts-ids-for-the-current-language

6 ноября, 2023 в 1:25 пп #14738089

Роман Дубровский

К сожалению это не решает проблему
Сами посты выводятся правильно, только того языка, который нам нужен
Но вот количество выводится сразу с двух
Для вывода счетчика мы используем wp_count_posts

6 ноября, 2023 в 1:32 пп #14738141

Andrey
Сторонник WPML с 06/2013

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

В таком случае, я не сильно понимаю проблему. Расскажите более детально, что Вы имеете ввиду под "количество выводится сразу с двух". Откуда берутся данные посты. И также, для информации полный пример используемой функции.

6 ноября, 2023 в 2:27 пп #14738875

Роман Дубровский

скрытая ссылка
На данной странице есть табы с посттипом, рассмотрим "Просування (2)"
В русской версии сайта всего 1 пост в посттипе "Просування", но счетчик показывает, что их 2 ( то есть оно считает пост в укр версии и в русской версии)

Вывод счетчика нужного посттипа происходит так
$count_target = wp_count_posts('target');
$published_target = $count_target->publish;

(<?php echo $published_target ; ?>)

6 ноября, 2023 в 3:31 пп #14739471

Andrey
Сторонник WPML с 06/2013

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

Спасибо за разъяснение. Проверив наши записи, я обнаружил, что вопрос ранее уже подымался. На данный момент, WPML никаким образом не фильтрует количество постов, поэтому такие результаты. Возможно, в будущем добавят фильтр.

Вижу, что тестировалась кастомная функция, которая была добавлена в functions.php file текущей темы:

 function get_count_posts($post_type  ) {
     global $wpdb;
     $src_lang = isset( $_REQUEST['source_lang'] ) ? sanitize_text_field( $_REQUEST['source_lang'] ) : apply_filters( 'wpml_current_language', null );
     $lang = isset( $_REQUEST['lang'] ) ? sanitize_text_field( $_REQUEST['lang'] ) : $src_lang;
     $wpml_type = "post_".$post_type;
     $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} as p join wp_icl_translations as ict on p.id = ict.element_id  WHERE post_type = %s and ict.language_code = %s and ict.element_type = %s GROUP BY post_status";

     $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $post_type, $lang, $wpml_type ), ARRAY_A );
     foreach ( $results as $row ) {
         $counts[ $row['post_status'] ] = $row['num_posts'];
     }
     $result = (object) $counts;

     return $result->publish;
}
add_action( 'wp_head', 'get_count_posts' );

Не могу сказать решает ли проблему или нет. Вы можете ее проверить. Если все еще проблема, возьмите функцию за пример пример, чтобы написать свою. К сожалению, других решений нет.

WPML API:
https://wpml.org/documentation/support/wpml-coding-api/