potrzebuję by na stronie sklepu wyświetlały się warianty produktów jako pojedynczy produkt (np. nie jedna koszulka tylko koszulka czerwona, koszulka czarna itp). Wtyczka "Show Variations On Shop & Category WooCommerce" (https://wordpress.org/plugins/woo-show- ... -category/) działała idealnie do czasu, aż uruchomiłam wtyczkę Search and Filter Pro (https://searchandfilter.com/documentati ... ts/custom/) jako custom. W function.php uruchamiam kod z dokumentacji jak zapisano dla customa i wtedy filtruje dobrze ale znowu pokazują się tylko rodzice produktów. Próbowałam przez add_filter utworzyć zapytanie do bazy danych, nawet znalazłam kod z wtyczki Show Variations, ale kiedy uruchamiam add_filter to cała strona się psuje i znikają niektóre elementy, a filtrowanie całkiem nie działa.
Jak połączyć te 2 wtyczki?
Poniżej kod z function.php
- Kod: Zaznacz cały
function pre_get_posts_function($query)
{
if (!is_admin() && $query->is_main_query() && (is_product_tag() || is_product_category()))
{
$query->set("search_filter_id", 6363);
$query->set("search_filter_id", 7113);
// add_filter('posts_clauses', 'rw_posts_clauses', 10, 2);
}
}
add_action( 'pre_get_posts', 'pre_get_posts_function');
function rw_posts_clauses ($clauses, $query ) {
global $wpdb;
if ($query->query_vars['gmwsvsfilter'] == 'yes') {
if (get_option('gmwsvs_hide_parent_product') == 'yes') {
$clauses['where'] .= " AND 0 = (select count(*) as totalpart from {$wpdb->posts} as oc_posttb where oc_posttb.post_parent = {$wpdb->posts}.ID and oc_posttb.post_type= 'product_variation') ";
}
$clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} as oc_posttba ON ({$wpdb->posts}.post_parent = oc_posttba.post_id AND oc_posttba.meta_key = '_wwsvsc_exclude_product_single' )";
$clauses['where'] .= " AND ( oc_posttba.meta_value IS NULL OR oc_posttba.meta_value!='yes') ";
$gmwsvs_exclude_cat = array();
$gmwsvs_exclude_cat = get_option('gmwsvs_exclude_cat');
if (!empty($gmwsvs_exclude_cat)) {
$clauses['where'] .= " AND ( ({$wpdb->posts}.post_type='product_variation' AND {$wpdb->posts}.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN (" . implode(",", $gmwsvs_exclude_cat) . ") )) OR {$wpdb->posts}.post_type='product') ";
}
}
return $clauses;
}