Фильтрация с помощью атрибутов – как отобразить все незапрошенные продукты под запросомPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Фильтрация с помощью атрибутов – как отобразить все незапрошенные продукты под запросом

Сообщение Anonymous »

Я добавил атрибуты для фильтрации продуктов на основе их выбора. Например, у меня есть поле с именем «плитка» как «да» или «нет». Если кто-то отметит «да», будут показаны все продукты с атрибутом «да». Все продукты с атрибутом «нет» не отображаются.
Как я могу отобразить все продукты, которые не отфильтрованы НИЖЕ отфильтрованного запроса (т. е.: показать все продукты с атрибутом «Нет» ' под фильтром продукта)?
Внутри моего файла function.php я считаю, что именно так запрашиваются отфильтрованные продукты:
function sort_products_by_positive_attributes($query) {
if (!is_admin() && $query->is_main_query() && is_woocommerce()) {
// First, you would need to get all products along with their positive attributes count
$products_with_scores = [];
if (!empty($query->posts)) {
foreach ($query->posts as $post) {
$product = wc_get_product($post->ID);
$score = get_product_positive_attributes_count($product);
$products_with_scores[$post->ID] = $score;
}
}else {

}
// Then you would sort products by their score
uasort($products_with_scores, function($a, $b) {
return $b - $a;
});

// After sorting, modify the query to order by the IDs in the sorted order
$sorted_ids = array_keys($products_with_scores);
$query->set('orderby', 'post__in');
$query->set('post__in', $sorted_ids);

/*
Query that displays non-filtered products goes here
*/

}
}
//add_action('pre_get_posts', 'sort_products_by_positive_attributes');

function get_product_positive_attributes_count($product) {
// You would implement the logic here to count the number of positive attributes
$score = 0;
// for each attribute, if it's positive, increment $score
return $score;
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... elow-query
Ответить

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

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

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

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

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