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

Wyszukiwanie postów tylko po tytułach

Grzegorz Chodacki1 kwietnia 2022layout, woocommerceposts_where, wp_query

Temat wydawał się dość prosty, a jednak zajął mi trochę czasu. Wujek Google wcale nie jest tak łaskawy w odpowiedzi na pytanie co zrobić aby wyniki wyszukiwania w wordpress obejmowały jedynie szukanie po tytułach postów (produktów) a nie po całej treści (opisie).

More

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.

More

Jak przyspieszyć stronę wyłączając odświeżanie koszyka woocoomerce

Grzegorz Chodacki31 marca 2022optymalizacja, woocommercewc-ajax, woocommerce_cart_fragments

Bardzo często zdarza się, że nasza strona z woocommerce działa wolno. Narzędzia do testowania prędkości typu GTMetrix, często pokazują, że wpływ na prędkość ładowania strony może mieć skrypt wc-ajax=get_refreshed_fragments. Generuje on opóźnienia i obciążenie serwera. Do czego jest on potrzebny, czy jest potrzebny i jak go wyłączyć?

More

Dodanie niestandardowych pól do produktu WooCoomerce

Maja Sędziak12 października 2021layout, woocommerce

Zagadnienie dotyczy innego podejścia niż przy poprzednim wpisie. Poprzednio dla produktów prostych i produktów z wariantami wyliczana była cena za 1m2 na podstawie wymiarów produktu po czym wyświetlana na karcie produktu. Tym razem dodamy dodatkowe pola od strony zaplecza, tj. cenę (pole input) oraz jednostkę (pole wyboru select). Trudność polega na tym, że w zależności od tego czy produkt jest prosty czy z wariantami, ceny wyświetlane są w różnych miejscach w tabeli produktu, dlatego użyte zostaną zupełnie inne hooki.

More

Wyliczenie ceny produktu za 1m2 dla danej kategorii produktów

Maja Sędziak23 września 2021woocommerce

Zagadnienie dotyczy produktów zarówno prostych jak i produktów z wariantami. Klient zażyczył sobie, aby dla danej kategorii produktów wyliczyć ceny za 1m2 i wyświetlić jako dodatkową informację na karcie produktu. 

Produkty danej kategorii mają różne wymiary i sprzedawane są w paczkach tj. po kilkanaście sztuk w paczce. Pierwszym krokiem rozwiązania było postawienie warunku czy dany produkt należy do szukanej kategorii i czy ma podane wymiary. Następnie wykonywano określone operacje w zależności czy produkt jest prosty czy z wariantami. 

W przypadku produktu prostego pobierana została długość i szerokość w mm oraz cena produktu wliczająca podatek (taka cena wyświetlana jest na karcie produktu). Produkty proste zawsze były pakowane po 16 sztuk. Dlatego wyliczenie ceny za 1m2 w tym wypadku było bardzo proste.

W przypadku produktów z wariantami dodatkowo trzeba było wziąć pod uwagę atrybut “format”, ponieważ dany format determinował ilość sztuk w paczce. Dla typu LF po 16 sztuk w paczce, dla typu NF – po 48 sztuk, a dla typu RF po 50 sztuk. Jako że atrybut “format” zapisywany był w formie typ+wymiary np.: LF-490x52x14 to należało wyciągnąć dwie pierwsze litery stringa i na tej podstawie wyznaczyć ilość sztuk w paczce.”

Cały kod poniżej:

function wyswietl_cene_za_metr_kwadratowy() {
 global $product;
 if( $product->has_dimensions() && has_term('king-size', 'product_cat', $product->ID) ) {
 
 if ($product->is_type('simple')) {
 $length = $product->get_length();
 $width = $product->get_width();
 $price_with_tax = $product->get_price_including_tax();
 $price_qm = $price_with_tax / (16 * $length * 0.001 * $width * 0.001);
 
 ?><div class="cena-za-metr">
 <span><?php echo 'Der Preis für 1 qm beträgt '; ?></span>
 </span><?php echo woocommerce_price($price_qm); ?></span>
 </div><?php

 } else if ($product->is_type('variable')) { 
 
 $available_variations = $product->get_available_variations(); 
 
 foreach( $available_variations as $variation => $value ){ 
 
 $format = $value['attributes']['attribute_pa_format'];
 $type = substr($format,0,2); 
 $amount; 
 if($type == 'lf') {
 $amount = 16;
 } else if ($type == 'rf') {
 $amount = 50;
 } else if ($type == 'nf') {
 $amount = 48;
 } else 
 return;

 $length = $value['dimensions']['length'];
 $width = $value['dimensions']['width'];
 $price_with_tax = $value['display_price'];

 $price_qm = $price_with_tax / ( $amount * $length * 0.001 * $width * 0.001);
 ?><div class="cena-za-metr">
 <span><?php echo 'Der Preis für 1 qm ' . strtoupper($format) . ' beträgt '; ?></span>
 </span><?php echo woocommerce_price($price_qm) . '<br>'; ?></span>
 </div><?php
 }
 } else return;
 } 
}
add_action('woocommerce_before_add_to_cart_form', 'wyswietl_cene_za_metr_kwadratowy');

Jak ukryć ceny dla wybranych produktów?

Grzegorz Chodacki9 września 2021layout

Typowe dla klienta. Grzegorz jestem przed zmianą cen trzeba na 3 dni wyłączyć ceny dla produktów danego producenta. Hmm – wyłączenie cen dla konkretnej kategorii to już każdy o tym pisał. Ale jak wyłączyć ceny dla produktu z określonym atrybutem? Bo tak też zrobiłem. Producent do dodatkowy atrybut produktu. I żeby nie było prosto – mówimy o produktach z wariantami. No to do dzieła.

function gc_ukryj_cena( $price, $product ) {
 global $product;
 $producent = $product->get_attribute('pa_producent');
 if ($producent == 'Kobok' || $producent == 'Kobok Eko') {
 
 $price = ''; 
 
 remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); 
 remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); 
 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
 remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
 remove_action( 'woocommerce_variable_add_to_cart', 'woocommerce_variable_add_to_cart', 30 );

 }
return $price;
}
add_filter( 'woocommerce_get_price_html', 'gc_ukryj_cena', 10, 2 ); 
add_filter( 'woocommerce_variable_sale_price_html', 'gc_ukryj_cena', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'gc_ukryj_cena', 10, 2 );

Powyższy kod załatwia ukrywanie ceny dla atrybutu o nazwie ‘Kobok’ oraz ‘Kobok Eko’. Dodatkowo ukrywamy guzik dodaj do koszyka. Zarówno dla prostych produktów jak i produktów z wariantami oraz na stronie z kategorią produktów.

Jak ukryć SKU na stronie produktu

Grzegorz Chodacki26 kwietnia 2021layout, woocommerce

Proste zadanie na dzisiaj. Klient zażyczył sobie, żeby na stronie z produktem ukryć SKU. Ale żeby na zapleczu nadal było dostępne. Użyjemy do tego filtra wc_product_sku_enabled. Oto krótki kod:

add_filter( 'wc_product_sku_enabled', 'gc_usun_sku' );
 
function gc_usun_sku( $sku ) {
 if ( ! is_admin() && is_product() ) {
 return false;
 }
 return $sku;
}

Na koniec jako bonus kod, który usunie na stronie produktu wszystkie metadane, czyli: SKU, kategorię i tagi

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );

Produkt dostępny od dnia

Grzegorz Chodacki26 marca 2021dla admina, layout, woocommerce

Sklep oferuje produkty specjalistyczne, których produkcja może odwlec się w czasie. W związku z tym przyda się pole z datą określające kiedy dokładnie dany produkt będzie dostępny na sklepie. Woocommerce oferuje możliwość złożenia zamówienia przy zerowym stanie magazynowym, tzw. backorders. No ale nie informuje klienta konkretnie jak długo ma na ten produkt czekać. Dodamy więc takie pole.

function poinformuj_klienta_kiedy_dostepny_porodukt() {
 echo '<p class="form_field data_field">';
 woocommerce_wp_text_input( array(
 'id' => 'data_dostepnosci_produktu',
 'label' => __('Data dostępności produktu', 'woocommerce'),
 'type' => 'date',
 'required' => false,
 'style' => 'width: 50%'
 )
 );
 echo '</p>';
}
add_action('woocommerce_product_options_stock_fields', 'poinformuj_klienta_kiedy_dostepny_porodukt' );

function zapis_data_dostepnosci_produktu( $id, $post) {
 update_post_meta( $id, 'data_dostepnosci_produktu', $_POST['data_dostepnosci_produktu']);
}
add_action( 'woocommerce_process_product_meta', 'zapis_data_dostepnosci_produktu', 10, 2 );

Teraz wystarczy pokazać wybraną datę przy produkcie, który ma braki magazynowe. Wykorzystamy do tego filtr woocommerce_get_availability

function change_specific_availability_text( $availability ) {
 global $product;
 if ($availability[ 'class' ] == 'available-on-backorder') {
 $data = get_post_meta($product->get_id(),'data_dostepnosci_produktu');
 $availability[ 'availability' ] = 'Produkt dostępny od: '.$data[0];
 }
 return $availability;
}
add_filter( 'woocommerce_get_availability', 'change_specific_availability_text', 20, 1 );

Przeliczanie waluty w koszyku

Grzegorz Chodacki26 marca 2021layout

Dość ciekawe zagadnienie. Klient zażyczył sobie, aby w koszyku było pokazane przeliczenie wartości zamówienia na inne waluty. Wykorzystaliśmy w tym przypadku wcześniej stworzony kod pobierający aktualne kursy walut ze strony NBP poprzez API.

$waluty = array (
 'EURO' => 'eur', 
 'USD' => 'usd', 
 'GBP' => 'gbp'
);

add_action('woocommerce_cart_totals_after_order_total', 
 function() use ( $waluty ) { 
 przeliczenie_waluty( $waluty ); 
 }
);

function przeliczenie_waluty( $waluty ) {
 
 $amount = WC()->cart->total;
 echo '<table>';
 foreach($waluty as $key => $value) {

 $dane = file_get_contents('http://api.nbp.pl/api/exchangerates/rates/a/'. $value .'/?format=json');
 $json = json_decode($dane);
 $mid_kurs = $json->rates[0]->mid;

 $price = $amount / $mid_kurs;
 echo 
 '<tr> <th>Suma w ' .$key. '</th> <td><strong><span>' . round($price, 2) . '</span><bdi> '. $key.'</bdi></strong></td> </tr>';
 }
 echo '</table>';
}

Ograniczona rola sprzedawcy w woocommerce

Grzegorz Chodacki26 marca 2021dla admina, woocommerce

Zadanie na dzisiaj. Jak zrobić aby pracownik obsługujący sklep nie miał wglądu w zamówienia. Może jedynie dodawać i edytować produkty. Po prostu stworzymy nową rolę – sprzedawca.

$rola = add_role( 'Sprzedawca', __('Sprzedawca'), array(
 'read' => true, 
 'read_product' => true,
 'read_shop_coupon' => true,

 'edit_posts' => true,
 'edit_post' => true,
 
 'manage_categories' => true, 
 'edit_themes' => false, 
 'install_plugins' => false, 

 'assign_product_terms' => true,
 'edit_product' => true,
 'edit_product_terms' => true,
 'edit_products' => true,
 'edit_others_products' => true,
 'edit_published_products' => true,
 'publish_products' => true,
 'delete_product' => true,
 'delete_product_terms' => true,
 'delete_products' => true,
 'delete_published_products' => true,
 'delete_others_products' => true,
 'manage_product_terms' => true,

 'publish_shop_coupons' => true,
 'assign_shop_coupon_terms' => true,
 'edit_shop_coupon' => true,
 'edit_shop_coupon_terms' => true,
 'edit_shop_coupons' => true,
 'edit_published_shop_coupons' => true,
 'manage_shop_coupon_terms' => true,
 'delete_published_shop_coupons' => true,
 'delete_others_shop_coupons' => true,

 'upload_files' => true

) );
1234›»

Ostatnie wpisy

  • Wyszukiwanie postów tylko po tytułach
  • Related product – produkty podobne w woocommerce
  • Jak przyspieszyć stronę wyłączając odświeżanie koszyka woocoomerce
  • Dodanie niestandardowych pól do produktu WooCoomerce
  • Wyliczenie ceny produktu za 1m2 dla danej kategorii produktów

Najnowsze komentarze

    Archiwa

    • 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