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

Кемеровские программисты php общаются здесь
Ответить
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;
}
< /code>
Я сделал больше тестов, поскольку «звезды обзоров» не были видны, я думал, что это было связано с кодом ... но это было потому, что продукты были просты, так как моя функция называет их идентификатором. База данных, но я не очень знаком с SQL, так что я колебаюсь. < /p>
For the new product 23856, it inherits the reviews of 998 and 999
UPDATE wp_comments
SET comment_post_ID = 23856
WHERE comment_post_ID IN (998, 999);
< /code>
Мне также удалось найти эту идею, но я не знаю, жизнеспособно ли это. Я хотел бы убедиться, что код верен. Я не могу загрузить резервную копию (что у меня есть), так как магазин сильно изменился с тех пор, как я удалил продукты. < /P>
SELECT
comment_ID,
comment_post_ID,
comment_author,
comment_content
FROM
wp_comments
WHERE
comment_type = 'review'
AND
comment_post_ID IN (526, 527);


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

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

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

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

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

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