Wyświetlanie wariantów produktu na stronie sklepu

Dział poświęcony pozostałym kwestiom związanym z kodowaniem w CMS Wordpress.
no avatar
kpiech
 
Posty: 2
Reputacja: 0 pkt
Od: 8 gru 2020, o 08:53

Wyświetlanie wariantów produktu na stronie sklepu

przez kpiech » 8 gru 2020, o 09:09

Dzień dobry,
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;
}

no avatar
baltrek
Świeżak
 
Posty: 95
Reputacja: 9 pkt
Od: 30 paź 2020, o 17:43

Re: Wyświetlanie wariantów produktu na stronie sklepu

przez baltrek » 8 gru 2020, o 13:41

Sorki ale tak na sucho, bez dostępu bezpośrednio do strony to ciężko to ogarnąć. Przede wszystkie nie wiem czemu masz 2 razy $query->set() dla tego samego argumentu ale to raczej najmniejszy problem bo pewnie i tak tylko drugi czyli "7113" jest brany pod uwagę.

Najlepiej by było zostawić tą wtyczkę do filtracji a zamiast tamtej show variants samemu wyświetlić wszystkie produkty jako pojedyncze. Wtedy normalnie Filter będzie działał. Nie robiłem tego więc z głowy nie powiem co i jak.

no avatar
kpiech
 
Posty: 2
Reputacja: 0 pkt
Od: 8 gru 2020, o 08:53

Re: Wyświetlanie wariantów produktu na stronie sklepu

przez kpiech » 8 gru 2020, o 15:28

baltrek napisał(a):Sorki ale tak na sucho, bez dostępu bezpośrednio do strony to ciężko to ogarnąć. Przede wszystkie nie wiem czemu masz 2 razy $query->set() dla tego samego argumentu ale to raczej najmniejszy problem bo pewnie i tak tylko drugi czyli "7113" jest brany pod uwagę.

Najlepiej by było zostawić tą wtyczkę do filtracji a zamiast tamtej show variants samemu wyświetlić wszystkie produkty jako pojedyncze. Wtedy normalnie Filter będzie działał. Nie robiłem tego więc z głowy nie powiem co i jak.



Dziękuję za odpowiedź, rzeczywiście nie usunęłam pierwszego $query->set . Próbowałam wyświetlać warianty za pomocą add_filter ale skutek ten sam. Również próbowałam to ustawić za pomocą $query->set('post_type','product_variation'); ale dalej pokazuje rodziców. może jakieś inne pomysły ?

no avatar
baltrek
Świeżak
 
Posty: 95
Reputacja: 9 pkt
Od: 30 paź 2020, o 17:43

Re: Wyświetlanie wariantów produktu na stronie sklepu

przez baltrek » 8 gru 2020, o 16:43

Hmm wg mnie nie zrobisz tego za pomocą jednej linijki kodu. To musisz zmodyfikować themplate woocomerca (oczywiście w child-theme) żeby na stronie np kategorii nie był wyświetlany jeden produkt + warianty tylko żeby traktował warianty jako oddzielny produkt.

Lub

przy pomocy add_action

Kod: Zaznacz cały
   $args = array(   
                'post_type' => 'product',
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
               wc_get_template_part( 'content', 'product' );
             
               
               
            endwhile;
        }
        wp_reset_postdata();

add_action( 'restrict_manage_posts', 'nazwa funkcji' );
lub
add_action( 'pre_get_posts', 'nazwa funkcji' );


Ja tego co prawda używałem tego do innych celów i nie ma tam variantow więc nie wiem czy będzie wyrzucać samych rodziców czy też z wariantami. Nie testowałem tego pod twój przypadek.
Oczywiście ta funkcja musi być użyta tylko na określonych stronach czyli np w kategorii
Napisz do mnie na bart.borowik@gmail.com to pomogę ale licz się z tym że będziesz musiał mi podać dane dostępowe. Odtworzenie tego na swoim środowisku będzie trochę trwała więc mogę to zrobić od razu u ciebie.




  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Kodowanie w Wordpressie

Kto przegląda forum Wordpress

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości