wPHP - wordpress, woocommerce - kodowanie bez wtyczek
WordPress - zakoduj to sam w PHP

Related product – produkty podobne w woocommerce

Grzegorz Chodacki31 marca 2022layout

Produkty powiązane w woocommerce to sekcja w większości szablonów, która pobiera produkty z naszego sklepu. Domyślnie mają one te same tagi lub kategorie co przeglądany produkt.

Przy dużej ilości produktów w sklepie, a co gorsza dużej ilości kategorii, bardzo losowy dobór produktów podobnych może być dość kłopotliwy. Tym bardziej, że nie możemy ich teoretycznie ustawić ręcznie na zapleczu.

Najprostszym rozwiązaniem, o którym często zapominamy, jest możliwość odpowiedniego połączenia produktów poprzez te same tagi. Wprawdzie zalecam tutaj ostrożność, gdyż nieumiejętne stosowanie tagów może doprowadzić do kanibalizacji strony. Czyli wygenerujemy sztucznie strony o identycznej zawartości a o różnych adresach url.

Na szczęście kod woocommerca daje nam wiele możliwości wpływania na to jak wyglądają PRODUKTY PODOBNE.

Jak zmienić liczbę wyświetlanych produktów podobnych?

Skorzystamy tutaj z filtra woocommerce_output_related_products_args:


add_filter( 'woocommerce_output_related_products_args', 'gc_related_products_args', 9999 );
 function gc_related_products_args( $args ) {
 $args['posts_per_page'] = 4; // liczba produktów podobnych
 $args['columns'] = 2; // liczba kolumn na wiersz
 return $args;
}

Jak wyłączyć produkty podobne?

Często jest tak, że nie chcemy by produkty podobne się wyświetlały. Bo np. niepotrzebnie zajmują uwagę klienta i odciągają go od finalizacji zakupu. Gdy bardzo dbamy o SEO na stronie to możemy również uznać je za niepożądane lub niekontrolowane linki wewnętrzne. Wystarczy wtedy jedna linijka kodu, oczywiście umieszczona w pliku functions.php:

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );

Można również pobawić się w nadpisanie stylu w CSS ale ja nie jestem zwolennikiem ukrywania elementów w kodzie strony.

.related.products {
 display: none;
}

Alternatywnie możemy wykorzystać filtr woocommerce_product_related_posts_query, który zwróci nam puste zapytanie z bazy. Za chwilę zresztą wrócimy do tego filtra gdy będziemy chcieli modyfikować podobne produkty według własnego uznania.

add_filter('woocommerce_product_related_posts_query', '__return_empty_array', 100);

Jak ukryć w podobnych produktach te, których brak na stanie?

Ponownie skorzystamy z filtra woocommerce_output_related_products_args:

add_filter( 'woocommerce_output_related_products_args', function( $args )
{
 $args = wp_parse_args( array(
 'posts_per_page' => 4, 
 'meta_query' => array (
 'key' => '_stock_status',
 'value' => 'instock'
 )
 ), $args );
 return $args;
});

Jak kontrolować kategorie w produktach podobnych?

Tutaj mamy do wykorzystania kolejny filtr woocommerce_get_related_product_cat_terms. Może być szczególnie przydatne gdy mamy dość rozbudowane drzewo kategorii i chcielibyśmy wyświetlić produkty podobne jedynie z konkretnej podkategorii.

function gc_related_products_subcats_only($terms, $product_id) {
 // sprawdzamy czy produkt znajduje się w jednej czy większej ilości kategorii
 $prodterms = get_the_terms($product_id, 'product_cat');
 if (count($prodterms) === 1) {
 return $terms; //jeśli w jednej no to kończymy działanie funkcji
 }
 
 // w przeciwnym przypadku przeszukujemy subkategorie
 $subcategories = array();
 foreach ($prodterms as $k => $prodterm) {
 if ($prodterm->parent === 0) {
 unset($prodterms[$k]); // i usuwamy kategorie nadrzędne
 } else {
 $subcategories[] = $prodterm->term_id;
 }
 }
 return $subcategories; zwracamy jesdynie produkty z subkategorii co znacznie zawęża nam dopasowanie
}
add_filter( 'woocommerce_get_related_product_cat_terms', 'gc_related_products_subcats_only', 20, 2 );

Jak kontrolować tagi w related products?

Ponieważ już wiemy, że domyślnie produkty podobne są generowane na podstawie podobnych kategorii i tagów no to zobaczmy jak np. wykluczyć konkretne tagi z tego filtrowania. Służy do tego funkcja woocommerce_get_related_product_tag_terms

function gc_exclude_tags_from_related( $tags ) {
 
 // ustalamy ID tagów które chcemy wykluczyć z filtrowania
 $exclude_tags = array( 100, 101, 102 );

 foreach( $tags as $index => $tag ){
 if( in_array( $tag, $exclude_tags ) ){
 unset( $tags[ $index ] );
 }
 }

 return $tags;
}
add_filter( 'woocommerce_get_related_product_tag_terms', 'gc_exclude_tags_from_related' );

Gdy chcemy by produkty podobne wyświetlały się tylko na podstawie tagów

Biorąc na logikę musimy w praktyce wyłączyć z filtrowania atrybuty związane z kategoriami. Nowy filtr nam się przyda: woocommerce_product_related_posts_relate_by_category

add_filter( 'woocommerce_product_related_posts_relate_by_category', function() {
 return false;
});

Niestandardowe produkty podobne

No to teraz takie trochę combo. Co jeśli zechcemy całkowicie po swojemu wyświetlić produkty podobne. Np. tylko te, które mają ten sam tytuł, albo taką samą cenę. Tak naprawdę za to wszystko odpowiada filtr woocommerce_related_products. Za pomocą argumentów możemy sobie sterować dowolnie zapytaniem jakie wykonujemy na bazie danych:

add_filter( 'woocommerce_related_products', 'gc_podobne_produkty_po_nazwie', 9999, 3 ); 
 
function gc_podobne_produkty_po_nazwie( $related_posts, $product_id, $args ) {
 $product = wc_get_product( $product_id );
 $title = $product->get_name();
 $related_posts = get_posts( array(
 'post_type' => 'product',
 'post_status' => 'publish',
 'title' => $title,
 'fields' => 'ids',
 'posts_per_page' => -1,
 'exclude' => array( $product_id ) //wykluczamy z wyników wyszukiwania id produktu który aktualnie wyświetlamy
 ));
 return $related_posts;
}

Produkty podobne z takimi samymi atrybutami

A tutaj kawałek kodu dla naszych koleżanek z zaprzyjaźnionej firmy. Trochę się z tym namęczyłem, przy okazji zgłębiając dokumentację nowego woocommerca i nowych tabel z atrybutami. Ale warto było wrócić do źródeł i trochę się poirytować. Poniższy kod przetestowany został na dwóch niezależnych sklepach z Woocommerce 6.3

add_filter( 'woocommerce_related_products', 'gc_related_products_by_taxonomy', 9999, 3 ); 
 
function gc_related_products_by_taxonomy( $related_posts, $product_id, $args ) {
 
 $related_posts = get_posts( array(
 'post_type' => 'product',
 'ignore_sticky_posts' => 1,
 'posts_per_page' => 4,
 'post__not_in' => array( $product_id ),
 'tax_query' => array( array(
 'taxonomy' => 'pa_thc',
 'field' => 'slug',
 'terms' => 'srednie',
 ) ),
 'fields' => 'ids',
 'orderby' => 'rand',
 ) );
 
 return $related_posts;
 
}
Related Products wyświetlone wyłącznie na podstawie zgodności atrybutu pa_pojemnosc o wartości 200ml
Jak przyspieszyć stronę wyłączając odświeżanie koszyka woocoomerce Wyszukiwanie postów tylko po tytułach

Related Posts

layout

Automatyczne aktualizacje wordpressa

Aby wyłączyć możliwość automatycznych aktualizacji WordPressa, musisz dodać poniższy kod w pliku wp-config.php. Najlepiej umieścić go przed komentarzem „To niesamowite, to już wszystko!”, który oznacza koniec pliku. Wprowadzenie tej zmiany spowoduje wyłączenie automatycznych aktualizacji WordPressa, wtyczek i motywów. Jeśli chcesz wyłączyć tylko aktualizacje rdzenia WordPressa, ale pozwolić na automatyczne aktualizacje wtyczek i motywów, użyj poniższego […]

layout

Jak wstawić kod HTML lub shortcode w opisach kategorii produktów

Czasami zachodzi potrzeba użycia bardziej rozbudowanego kodu w opisie kategorii produktów lub użycia shortcode. Niestety domyślne ustawienia nie pozwalają na to. Musimy wtedy użyć drobnej modyfikacji. Oto sposób na dodanie obsługi shortcode’ów i HTML do opisów kategorii produktów w WooCommerce: Dzisiaj wyjątkowo instrukcja dla instalatorów wtyczek. Powyższe funkcjonalności włączy dla Was wtyczka WP Editor. Aby […]

layout

Jak wyłączyć odzyskiwanie hasła

Sytuacja tak, że trzeba było zmienić hasła dla wszystkich adminów, ale bez usuwania ich kont. Natomiast trzeba było wyłączyć możliwość odzyskiwania hasła, żeby zablokowany użytkownik nie mógł go sobie zresetować. Oczywiście mały kod w functions.php

Ostatnie wpisy

  • Automatyczne aktualizacje wordpressa
  • Jak wyłączyć wymagane pola na stronie zamówienia woocommerce
  • Jak wstawić kod HTML lub shortcode w opisach kategorii produktów
  • Jak wyłączyć odzyskiwanie hasła
  • Pobieranie aktualnego kursu walut przez API NBP

Najnowsze komentarze

    Archiwa

    • kwiecień 2023
    • wrzesień 2022
    • lipiec 2022
    • kwiecień 2022
    • marzec 2022
    • październik 2021
    • wrzesień 2021
    • kwiecień 2021
    • marzec 2021
    • grudzień 2020
    • lipiec 2020
    • marzec 2020
    • luty 2020
    • styczeń 2020
    • maj 2019
    • luty 2019
    • listopad 2018
    • sierpień 2018
    • czerwiec 2018
    • maj 2018
    • marzec 2018
    • luty 2018
    • styczeń 2018

    Kategorie

    • dla admina
    • layout
    • optymalizacja
    • woocommerce

    Meta

    • Zaloguj się
    • Kanał wpisów
    • Kanał komentarzy
    • WordPress.org
    Strony na Wordpress - uKONTENTowani.pl
    TO NIE JEST STRONA DLA INSTALATORÓW WTYCZEK