Получить все комментарии/отзывы WooCommerce
Мне нужно получить все комментарии со всех товаров в WooCommerce.
Этот код не возвращает мне НИ ОДНОГО комментария...
<?php $comments = get_comments( array( 'post_type' => 'product') ); ?>
Однако
<?php $comments = get_comments( array( 'post_id' => '4169') );
Возвращает комментарии для конкретного ID товара. Как сделать запрос для ВСЕХ комментариев?
Заранее спасибо.

Попробуйте это:
$args = array(
'number' => 100,
'status' => 'approve',
'post_status' => 'publish',
'post_type' => 'product'
);
$comments = get_comments( $args );
где вы можете изменить количество комментариев по своему усмотрению.
Отладка:
Возможно, что-то изменяет запрос через хук pre_get_comments
?
Для отладки вы можете проверить SQL-запрос с помощью:
global $wpdb;
printf( '<pre>%s</pre>', $wpdb->last_query );
где вы добавляете этот код сразу после фрагмента с get_comments()
.
Также проверьте экран edit-comments.php
, отображаются ли там комментарии и их статус.

Я всегда делаю так, и это работает, виджет делает то же самое. Проблема должна быть в чем-то другом. @kroma

Вот исходный код этого виджета

Да, теперь я вижу, что WC Recent Reviews тоже не показывают результаты... есть идеи?

Кстати, должны ли отзывы WooCommerce также появляться в стандартном разделе Комментариев в админке WP?

Может, поделитесь SQL-запросом? Вы видели комментарии на экране edit-comments.php
?

@birgire - спасибо за отладку. Выяснил, что проблемы создавал WPML - продукты не были отмечены как переводимые. После того как сделал их переводимыми, все заработало. +1

Вам нужно будет пройтись в цикле по всем комментариям и отобразить их. Вот пример кода, который это сделает:
$args = array(
'status' => 'approve', // только одобренные комментарии
'post_status' => 'publish', // только опубликованные записи
'post_type' => 'product' // тип записи - товар
);
$comments = get_comments( $args );
foreach( $comments as $comment ) :
echo( $comment->comment_author . '<br />' . $comment->comment_content);
endforeach;
Вы также можете передать параметр 'number', если хотите указать количество отображаемых комментариев. По умолчанию значение null (без ограничений).

WooCommerce переопределяет запросы комментариев, что, по-видимому, влияет на WC_Comment_Query и get_comments(), фильтруя комментарии магазина непосредственно в SQL.
Добавление следующего кода перед использованием WC_Comment_Query предотвратило исключение комментариев магазина из моего запроса.
remove_filter('comments_clauses', array( 'WC_Comments' ,'exclude_order_comments'), 10, 1 );
