Как унаследовать рейтинги на продуктах с переменной woocommerce?MySql

Форум по Mysql
Ответить
Anonymous
 Как унаследовать рейтинги на продуктах с переменной woocommerce?

Сообщение Anonymous »

Я создал несколько переменных продуктов в Woocommerce, группируя аналогичные простые продукты, которые имели оценки от отзыва клиентов для плагина Woocommerce. Но я удалил простые продукты, из которых были унаследованы отзывы, и они были потеряны. < /P>
Есть ли способ сделать это через базу данных? Могу ли я унаследовать отзывы, каким -то образом запрашивая их из базы данных, даже если продукты больше не находятся на панели WordPress? Я уже проконсультировался с документацией для этого плагина, но я ничего об этом не нашел.

Код: Выделить всё

add_filter( 'woocommerce_product_get_rating_counts', 'fusionar_valoraciones_heredadas', 10, 2 );
add_filter( 'woocommerce_product_get_review_count', 'fusionar_valoraciones_heredadas', 10, 2 );
add_filter( 'woocommerce_product_get_average_rating', 'fusionar_valoraciones_heredadas', 10, 2 );

function fusionar_valoraciones_heredadas( $value, $product ) {

// Tabla de asignación: 'ID del producto nuevo' => ['IDs de los productos antiguos']
$productos_a_fusionar = [
24359 => [326, 327], // Nuevo producto con ID 23736 hereda de los productos 326 y 327
24224 => [559, 972],
24192 => [666, 667]
];

// Comprobamos si el ID del producto actual está en nuestra tabla de asignación
if ( array_key_exists( $product->get_id(), $productos_a_fusionar ) ) {

// Si es así, obtenemos los IDs antiguos para este producto
$ids_antiguos = $productos_a_fusionar[ $product->get_id() ];
$rating_count = [];
$review_count = 0;

foreach ( $ids_antiguos as $old_id ) {
$old_product = wc_get_product( $old_id );
if ( $old_product ) {
foreach ( $old_product->get_rating_counts() as $rating => $count ) {
if ( ! isset( $rating_count[ $rating ] ) ) {
$rating_count[ $rating ] = 0;
}
$rating_count[ $rating ] += $count;
}
$review_count += $old_product->get_review_count();
}
}

if ( current_filter() == 'woocommerce_product_get_rating_counts' ) {
return $rating_count;
}
if ( current_filter() == 'woocommerce_product_get_review_count' ) {
return $review_count;
}
if ( current_filter() == 'woocommerce_product_get_average_rating' ) {
$total = 0; $count = 0;
foreach ( $rating_count as $rating => $num ) {
$total += $rating * $num;
$count += $num;
}
return $count ? round( $total / $count, 2 ) : 0;
}
}
return $value;
}
Я провел больше тестов, поскольку «звезды обзоров» не были видны, я думал, что это произошло из -за кода ... но это было потому, что продукты были простыми, так как моя функция вызывает их по Id.

Подробнее здесь: https://stackoverflow.com/questions/797 ... e-products
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»