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

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.

Dodanie pól do produktu prostego – WooCommerce

Cena dla produktu prostego wyświetlana jest w zakładce „Ogólne” tabeli z danymi produktu. Tam właśnie dodane zostaną dwa pola woocommerce’owe. Aby nowe pola nie pokazywały się dla produktów z wariantami w zakładce „Ogólne” należy w bloku <div> (który jest rodzicem dla nowych pól) dodać klasy ’show_if_simple’ oraz ’hide_if_variable’.

function new_simple_product_fields( ) {
 global $product;
 
 echo '<div class="options_group show_if_simple hide_if_variable">';
 woocommerce_wp_text_input( array(
 'id' => '_cena_za_jednostke',
 'slug' => '_cena_za_jednostke',
 'label' => __('Cena za 1 jednostkę', 'woocommerce'),
 'type' => 'text',
 'required' => false,
 'style' => 'width: 50%'
 )
 );
 woocommerce_wp_select( array(
 'id' => '_jednostka',
 'slug' => '_jednostka',
 'label' => __('Jednostka', 'woocommerce'),
 'class' => 'short',
 'options' => array(
 '' => __('Wybierz jednostkę', 'woocommerce'), //puste 'value' oznacza że żadne pole jest niewybrane
 'm2' => __('m2', 'woocommerce'), 
 'szt' => __('szt', 'woocommerce')
 )
 )
 );
 echo '</div>';
}
add_action( 'woocommerce_product_options_general_product_data', 'new_simple_product_fields');

function save_new_simple_product_fields( $id, $post) {
 $woocomerce_text_field = $_POST['_cena_za_jednostke'];
 update_post_meta( $id, '_cena_za_jednostke', esc_attr( $woocomerce_text_field ));

 $woocommerce_select = $_POST['_jednostka'];
 update_post_meta( $id, '_jednostka', esc_attr( $woocommerce_select ) );
}
add_action( 'woocommerce_process_product_meta', 'save_new_simple_product_fields', 10, 2 );fr($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');
custom fields woocommerce
Dodanie pola ceny i jednostki do produktu prostego woocommerce

Dodanie pól do produktu z wariantami – WooCommerce

W przypadku produktu z wariantami pojawia się dodatkowa zakładka „Warianty” gdzie dodawane zostają warianty i właśnie tam pod miejscem gdzie wpisywana jest cena, dodamy nowe pola. Abyśmy mogli odwoływać się do naszych niestandardowych pól poprzez tabele danych wariantu – należy scalić je z obecną tabelą danych – przedstawia to funkcja set_variation_new_field( $variation_data, $product, $variation ) .

function new_variation_product_fields( $loop, $variation_data, $variation ) {
 
 echo '<div class="options_group form-row form-row-full">'; 
 woocommerce_wp_text_input( array(
 'id' => '_cena_variable[' . $loop .']',
 'slug' => '_cena_variable[' . $loop .']',
 'label' => __('Cena za 1 jednostkę', 'woocommerce'),
 'type' => 'text',
 'required' => false,
 'value' => get_post_meta( $variation->ID, '_cena_variable', true )
 )
 );
 woocommerce_wp_select( array(
 'id' => '_jednostka_variable[' . $loop .']',
 'slug' => '_jednostka_variable[' . $loop .']',
 'label' => __('Jednostka', 'woocommerce'),
 'type' => 'select',
 'options' => array(
 '' => __('Wybierz jednostkę', 'woocommerce'), 
 'm2' => 'm2',
 'szt' => 'szt'
 ),
 'value' => get_post_meta( $variation->ID, '_jednostka_variable', true )
 )
 );
 echo '</div>';
}
add_action( 'woocommerce_variation_options_pricing', 'new_variation_product_fields', 10, 3);


function save_new_variation_product_fields( $variation_id, $i ) {
 
 if( isset($_POST['_cena_variable'][$i]) ) {
 update_post_meta( $variation_id, '_cena_variable', $_POST['_cena_variable'][$i]);
 }
 if( isset($_POST['_jednostka_variable'][$i]) ) {
 update_post_meta( $variation_id, '_jednostka_variable', $_POST['_jednostka_variable'][$i]);
 } 
}
add_action('woocommerce_save_product_variation', 'save_new_variation_product_fields', 10, 2);


/* dodanie stworzonych pól do tabeli danych wariantu */
function set_variation_new_field( $variation_data, $product, $variation ) {
 return array_merge( $variation_data, array(
 'cena_variable' => $variation->get_meta('_cena_variable'),
 'jednostka_variable' => $variation->get_meta('_jednostka_variable')
 ) 
 );
}
add_filter( 'woocommerce_available_variation', 'set_variation_new_field', 10, 3 );
woocommerce products custom fields
Dodanie pola ceny i jednostki do produktu z wariantami woocommerce

Wyświetlenie niestandardowych pól na front-endzie w karcie produktu – WooCommerce.

Pozostało jedynie wyświetlić nowo powstałe pola – tylko jeśli cena została uzupełniona oraz jednostka została wybrana z listy.

function display_new_simple_product_fields() {
 global $product, $post;

 if ($product->is_type('simple')) { 

 $cena = get_post_meta( $post->ID, '_cena_za_jednostke', true );
 $jednostka = get_post_meta( $post->ID, '_jednostka', true );
 if( !empty($cena) && !empty($jednostka) ) {
 echo '<div> Cena za 1 ' . $jednostka . ' wynosi ' . woocommerce_price($cena) . '.</div>';
 }
 else return;
 }
 else if( $product->is_type('variable')) {

 $available_variations = $product->get_available_variations(); 
 foreach( $available_variations as $variation => $value ){ 
 $format = $value['attributes']['attribute_pa_format'];
 $cena = $value['jednostka_variable'];
 $jednostka = $value['cena_variable'];

 if( !empty($cena) && !empty($jednostka) ) {
 echo '<br>Cena za 1' . $cena .' '. strtoupper($format) . ' wynosi '. woocommerce_price($jednostka); 
 }
 else return;
 }
 echo '<br>';
 }
}
add_action('woocommerce_before_add_to_cart_form', 'display_new_simple_product_fields');
Wyliczenie ceny produktu za 1m2 dla danej kategorii produktów Jak przyspieszyć stronę wyłączając odświeżanie koszyka woocoomerce

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 […]

woocommerce

Jak wyłączyć wymagane pola na stronie zamówienia woocommerce

Czasami zachodzi potrzeba wyłączenia, niektórych wymaganych pól na stronie zamówienia. Np. mamy tego typu wysyłkę, że klient nie chce podawać imienia i nazwiska. Albo chce dyskretnie na numer paczkomatu, bez podawania adresu domowego. Oczywiście możemy zrobić to za pomocą wtyczki Checkout Field Editor, ale jest ona komercyjna i bez corocznych aktualizacji potrafi popsuć zaplecze. Dlatego […]

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 […]

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