To jest Poziom deweloperski dokument. Jeśli nie jesteś zaznajomiony z kodem/szablonami i rozwiązywaniem potencjalnych konfliktów, skontaktuj się z programistą zaznajomionym z FooEvents i/lub WooCommerce.
Ważne, przeczytaj najpierw #
Te fragmenty są dostarczane jako uprzejmość i nie stanowią części oferty produktów FooEvents. Są one uważane za dostosowania i nie są oficjalnie obsługiwane przez FooEvents. W związku z tym nie zapewniamy wsparcia dla snippetów i dostosowań zgodnie z naszym Warunki świadczenia usług. Używaj na własne ryzyko.
Automatycznie kompletuj zamówienia #
Dzięki temu bilety będą automatycznie wysyłane po otrzymaniu płatności, zamiast konieczności ręcznego uzupełniania zamówienia. Upewnij się, że produkty wydarzenia są ustawione na "Wirtualny" i "Do pobrania", jak wyjaśniono w naszym dokumentacja pomocyw przeciwnym razie kolejność nie będzie zakończy się automatycznie, nawet jeśli dokonano płatności.
Dodaj następujący kod do motywu podrzędnego functions.php lub za pośrednictwem wtyczki, która umożliwia dodawanie niestandardowych funkcji, takich jak Fragmenty kodu wtyczka. Unikaj dodawania niestandardowego kodu bezpośrednio do motywu nadrzędnego functions.php ponieważ zostanie on nadpisany podczas aktualizacji motywu.
Można również zmienić status "Completed" na inny status zamówienia, taki jak "Processing".
/** * @snippet Programmatically Complete Paid WooCommerce Orders * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 9 * @community https://businessbloomer.com/club/ */ add_filter( 'woocommerce_payment_complete_order_status', 'bbloomer_autocomplete_processing_orders', 9999 ); function bbloomer_autocomplete_processing_orders() { return 'completed'; }
Note that the above code snippet won’t work with COD / BACS / Cheque orders when order total is > 0. Check the free plugin on this page to get this sorted.
Pokaż imię i nazwisko oraz adres e-mail uczestnika w wiadomości e-mail administratora nowego zamówienia. #
Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Szczegóły dotyczące uczestników</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />'; echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />'; echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />'; echo "</p>"; } } }
Wyświetlanie wszystkich niestandardowych pól uczestników bez etykiet w wiadomości e-mail administratora nowego zamówienia. #
Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Szczegóły dotyczące uczestników</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />'; echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />'; echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />'; foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) { echo $caf.'<br />'; } echo "</p>"; } } }
Wyświetlanie niestandardowych pól uczestników z etykietami w wiadomości e-mail administratora nowego zamówienia #
Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak. Upewnij się, że zastąpiłeś "ovsxtmynwagotamjqieq" i "ruzwhgbuhzuzzdwnnaxe" w przykładowym kodzie swoim własnym niestandardowym kodem pola uczestnika. Informacje te można znaleźć, edytując bilet i szukając każdego niestandardowego pola uczestnika w sekcji "Pola niestandardowe". Będziesz musiał dodać każde niestandardowe pole uczestnika i jego etykietę indywidualnie.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Szczegóły dotyczące uczestników</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />'; echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />'; echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />'; echo '<strong>Urodziny</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq']'.<br />'; echo '<strong>Ulubiona piosenka</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe']'.<br />'; echo "</p>"; } } }
Wyświetlanie godziny rozpoczęcia wydarzenia na liście wydarzeń #
Dodaj następujący fragment kodu do motywu functions.php plik. Nadaj styl wyświetlaniu godziny, dodając CSS dla klasy "fooevents-date".
Zmień umiejscowienie czasu, używając innego hak.
. [php] function fooevents_display_time_in_shop_listing() { global $post; if (is_front_page() || is_home() || is_shop() || is_product_category() || is_product_tag()) { echo '<div class="fooevents-date">'; echo get_post_meta($post->ID, 'WooCommerceEventsHour', true).":"; echo get_post_meta($post->ID, 'WooCommerceEventsMinutes', true). ' '; echo get_post_meta($post->ID, 'WooCommerceEventsPeriod', true); echo '</div>'; } } add_filter( 'woocommerce_after_shop_loop_item_title', 'fooevents_display_time_in_shop_listing', 35 ); [/php]
Wyświetlanie zarejestrowanych uczestników w formie tabeli #
Dodaj następujący fragment kodu do motywu functions.php aby wyświetlić wszystkich zarejestrowanych uczestników wydarzenia w formacie siatki tabeli. Po dodaniu fragmentu kodu możesz użyć shortcode w następujący sposób:
[fooevents_attendees]
aby wyświetlić wszystkich uczestników dla wszystkich wydarzeń, lub w ten sposób:
[fooevents_attendees product_id=123]
gdzie "123" to identyfikator wydarzenia, dla którego chcesz wyświetlić listę uczestników.
function fooevents_display_attendees($attributes) { $product_id=''; if(!empty($attributes['product_id'])) { $product_id = $attributes['product_id']; } $output =''; $args = array( 'numberposts' => -1, 'posts_per_page' => -1, 'post_type' => 'event_magic_tickets', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'WooCommerceEventsProductID', 'value' => $product_id, 'compare' => 'LIKE' ) ) ); $the_query = new WP_Query( $args ); if( $the_query->have_posts() ): while ( $the_query->have_posts() ) : $the_query->the_post(); $postid = $the_query->post->ID; // wyprowadzenie wszystkich wyników - DOSTOSUJ DO SWOICH UPODOBAŃ $output .= "<tr>"; $output .= "<td>".get_the_title()."</td>"; $output .= "<td>".get_post_meta($postid, 'WooCommerceEventsPurchaserFirstName', true)".</td>"; $output .= "<td>".get_post_meta($postid, 'WooCommerceEventsPurchaserLastName', true)".</td>"; $output .= "</tr>"; endwhile; endif; wp_reset_query(); $output ="<table>".$output".</table>"; return $output; } add_shortcode("fooevents_attendees", "fooevents_display_attendees"); [/php]
Wyświetlanie daty wydarzenia przed tytułem na stronie produktu #
Zmień umiejscowienie daty, używając innego hak.
. [php] function fooevents_display_date_on_single() { global $post; $product = wc_get_product( $post->ID ); $start_date = $product->get_meta( 'WooCommerceEventsDate' ); $end_date = $product->get_meta( 'WooCommerceEventsEndDate' ); if ( $end_date ) { printf( '<h3>%s</h3>', esc_html( $start_date . ' - ' . $end_date ) ); } else if( $start_date ) { printf( '<h3>%s</h3>', esc_html( $start_date ) ); } } add_action( 'woocommerce_single_product_summary', 'fooevents_display_date_on_single' );
Jeśli chcesz, aby data wydarzenia była dostępna jako shortcode, możesz dodać następującą linię poniżej funkcji:
add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');
Następnie można użyć shortcode [fooevents_date_on_single]
aby wyświetlić datę wydarzenia na stronie.
Zastąpienie ikony miejsca na planie miejsc innym obrazem #
Zmodyfikuj poniższy fragment kodu CSS, dodając adres URL do innego obrazu, którym chcesz zastąpić domyślny obraz siedzenia dla wszystkich miejsc. Dodaj zmodyfikowany fragment kodu do niestandardowego pliku CSS motywu.
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { background-image: url(../images/seat.svg); }
Usuń ikonę miejsca na planie miejsc, aby miejsca były wyświetlane jako boksy. #
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { background-image: none; }
Zmiana kierunku numerów miejsc na planie miejsc #
#fooevents_seating_dialog .fooevents_seating_chart_view_row { display: flex; flex-direction: row-reverse; justify-content: flex-end; }
Pokaż miejsca nieparzyste po prawej stronie, a parzyste po lewej. #
#fooevents_seating_dialog .fooevents_seating_chart_view_row > span:nth-of-type(even) { float: left; }
Wyświetlanie miejsc na środku tabeli miejsc #
[css] #fooevents_seating_dialog .fooevents_seating_chart_view_row_name, #fooevents_seating_dialog .fooevents_seating_chart_view_row { text-align: center; } [/css]
Plan miejsc powinien przewijać się poziomo zamiast wyświetlać miejsca w następnym rzędzie. #
Może to być przydatne, jeśli masz wiele miejsc w rzędzie i chcesz, aby były one wyświetlane obok siebie zamiast w następnym rzędzie, jeśli nie mieszczą się w jednym wierszu.
#fooevents_seating_dialog .fooevents_seating_chart_view_row { overflow-x: scroll; white-space: nowrap; }
Wyświetlanie siatki kalendarza na komputerach stacjonarnych i listy tygodni kalendarza na urządzeniach mobilnych. #
Dodaj dwa skróty kalendarza na stronie lub w poście, w którym chcesz wyświetlić swój kalendarz. Pierwszy shortcode wyświetli siatkę kalendarza i powinien wyglądać następująco:
[fooevents_calendar id="desktop"]
Drugi shortcode wyświetli listę tygodni kalendarza i powinien wyglądać następująco:
[fooevents_calendar id="mobile" defaultView="listWeek"]
Dodaj następujący fragment kodu CSS do niestandardowego pliku CSS motywu. Upewnij się, że wartość selektora CSS ID jest taka sama jak wartość atrybutu "id" określonego w kodzie skróconym. Możesz dostosować właściwość "max-width" do rozmiaru ekranu, na którym ma być wyświetlana lista tygodni kalendarza, a siatka kalendarza ma być ukryta.
#desktop_fooevents_calendar { display: block; } #mobile_fooevents_calendar { display: none; } @media screen and (max-width: 600px) { #desktop_fooevents_calendar { display: none; } #mobile_fooevents_calendar { display: block; } }
Dynamic Calendar #
Dodaj następujący fragment kodu do motywu functions.php file to display the Calendar with only the current event product when used on Product Descriptions/pages.
function dynamic_fooevents_calendar_shortcode() { if (is_product()) { global $product; if ($product) { $product_id = $product->get_id(); return do_shortcode('[fooevents_calendar post="' . $product_id . '"]'); } } return ''; // fallback if not on product page } add_shortcode('dynamic_fooevents_calendar', 'dynamic_fooevents_calendar_shortcode');
After adding the code snippet, you can use the shortcode like this:
[dynamic_fooevents_calendar]
Zmiana położenia ikony Kopiuj szczegóły kupującego #
Poniższy fragment kodu spowoduje wyrównanie przycisku kopiowania do prawej strony etykiety imienia:
.fooevents-copy-from-purchaser { float: right; margin-bottom:-1.7em }
Jeśli nie używasz etykiet, a raczej symboli zastępczych, użyj poniższego fragmentu kodu:
.fooevents-copy-from-purchaser { float: right; margin-top:-2em }
Pokaż zakładkę "Szczegóły wydarzenia" jako pierwszą na stronie wydarzenia. #
Dodaj następujący fragment kodu do motywu functions.php plik.
add_filter( 'woocommerce_product_tabs', 'reorder_tabs', 98 ); function reorder_tabs( $tabs ) { $tabs['woocommerce_events']['priority'] = 1; return $tabs; }
Przekieruj wszystkie przyciski "Dodaj do koszyka" na strony produktów. #
Jeśli produkt jest produktem prostym, domyślnie przycisk "Dodaj do koszyka" automatycznie doda produkt do koszyka klienta. W przypadku korzystania z rozszerzenia FooEvents Bookings może być wymagane, aby klienci najpierw przeszli do strony produktu, aby wybrać datę i miejsce rezerwacji. Poniższy fragment kodu zapewni, że po kliknięciu przycisku "Dodaj do koszyka" dla prostych produktów, użytkownik zostanie przekierowany na stronę produktu.
add_filter( 'woocommerce_loop_add_to_cart_link', 'fooevents_modify_add_to_cart_button_url', 10, 2 ); function fooevents_modify_add_to_cart_button_url( $button, $product ) { if (is_product_category() || is_shop()) { $button_text = $product->add_to_cart_text(); $button_link = $product->get_permalink(); $button = '<a class="button" href="/pl/' . $button_link . '/">' . $button_text . '</a>'; return $button; } }
Wyświetla FREE, jeśli cena wydarzenia jest ustawiona na zero (0). #
Dodaj następujący fragment kodu do motywu functions.php jeśli chcesz zmienić wydarzenia i produkty z ceną "0" na "FREE". Możesz również zastąpić słowo "FREE" innym słowem lub frazą lub pozostawić je puste, jeśli nie chcesz, aby cokolwiek było wyświetlane.
add_filter( 'woocommerce_get_price_html', 'wp_price_free_zero_empty', 100, 2 ); function wp_price_free_zero_empty( $price, $product ) { if ( '' === $product->get_price() || 0 == $product->get_price() ) { $price = 'FREE'; } return $price; }
Wyświetlanie produktów i wariantów (biletów) w formacie siatki tabeli #
Dodaj następujący fragment kodu do motywu functions.php aby wyświetlać produkty i warianty w formacie siatki tabeli na stronie wydarzenia/produktu zamiast domyślnej listy rozwijanej. Każda opcja biletu zostanie wyświetlona w nowym wierszu i będzie miała własny selektor ilości.
Uwaga: This code snippet might be incompatible with the FooEvents Siedzenie i FooEvents Rezerwacje selectors on the product page. It should work with Seating events if you only display the Seating Chart on the Checkout page.
function woocommerce_variable_add_to_cart(){ global $product, $post; $variations = find_valid_variations(); // Check if the special 'price_grid' meta is set, if it is, load the default template: if ( get_post_meta($post->ID, 'price_grid', true) ) { // Enqueue variation scripts wp_enqueue_script( 'wc-add-to-cart-variation' ); // Load the template wc_get_template( 'single-product/add-to-cart/variable.php', array( 'available_variations' => $product->get_available_variations(), 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_variation_default_attributes() ) ); return; } // Cool, lets do our own template! ?> <table class="variations variations-grid" cellspacing="0"> <tbody> <?php foreach ($variations as $key => $value) { if( !$value['variation_is_visible'] ) continue; ?> <tr> <td> <?php foreach($value['attributes'] as $key => $val ) { $val = str_replace(array('-','_'), ' ', $val); printf( '<span class="attr attr-%s">%s</span>', $key, ucwords($val) ); } ?> </td> <td> <?php echo $value['price_html'];?> </td> <td> <?php if( $value['is_in_stock'] ) { ?> <form class="cart" action="/pl//?php%20echo%20esc_url(%20$product-add_to_cart_url()%20);%20?" method="post" enctype='multipart/form-data' data-trp-original-action="<?php echo esc_url( $product->add_to_cart_url() ); ?>"> <?php woocommerce_quantity_input(); ?> <?php if(!empty($value['attributes'])){ foreach ($value['attributes'] as $attr_key => $attr_value) { ?> <input type="hidden" name="<?php echo $attr_key?>" value="<?php echo $attr_value?>"> <?php } } ?> <button type="submit" class="single_add_to_cart_button btn btn-primary"><span class="glyphicon glyphicon-tag"></span> Dodaj do koszyka</button> <input type="hidden" name="variation_id" value="<?php echo $value['variation_id']?>" /> <input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" /> <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $post->ID ); ?>" /> <input type="hidden" name="trp-form-language" value="pl"/></form> <?php } else { ?> <p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p> <?php } ?> </td> </tr> <?php } ?> </tbody> </table> <?php } function find_valid_variations() { global $product; $variations = $product->get_available_variations(); $attributes = $product->get_attributes(); $new_variants = array(); // Loop through all variations foreach( $variations as $variation ) { // Peruse the attributes. // 1. If both are explicitly set, this is a valid variation // 2. If one is not set, that means any, and we must 'create' the rest. $valid = true; // so far foreach( $attributes as $slug => $args ) { if( array_key_exists("attribute_$slug", $variation['attributes']) && !empty($variation['attributes']["attribute_$slug"]) ) { // Exists } else { // Not exists, create $valid = false; // it contains 'anys' // loop through all options for the 'ANY' attribute, and add each foreach( explode( '|', $attributes[$slug]['value']) as $attribute ) { $attribute = trim( $attribute ); $new_variant = $variation; $new_variant['attributes']["attribute_$slug"] = $attribute; $new_variants[] = $new_variant; } } } // This contains ALL set attributes, and is itself a 'valid' variation. if( $valid ) $new_variants[] = $variation; } return $new_variants; }
Dodaj obsługę dziennych godzin rozpoczęcia i zakończenia do motywów biletów #
Od wersji 1.5.5 z FooEvents Wielodniowy wtyczki, można wybrać różne godziny rozpoczęcia i zakończenia dla każdego dnia wydarzenie wielodniowe. Obsługa tej funkcji została również dodana do wszystkich Motywy biletów FooEvents. Proszę Postępuj zgodnie z poniższymi instrukcjami aby zaktualizować istniejący szablon biletu. Jeśli korzystasz z niestandardowego szablonu biletu i nie jesteś w stanie zastąpić szablonu biletu zaktualizowaną wersją, dodaj poniższy fragment kodu do szablonu biletu, aby dodać obsługę czasu rozpoczęcia i zakończenia. [php]
<!-- MULTI-DAY DETAILS --> <strong><?php printf( __( '%1$s %2$d: ', 'woocommerce-events' ), $ticket['dayTerm'], $x ); ?></strong> <?php echo esc_attr( $date ); ?><br /> . ?) ? ' ' . $ticket['WooCommerceEventsSelectDatePeriod'][ $y ] : ''; ?>. . <br />
Zastąp domyślne linki przycisków Dodaj do koszyka WooCommerce linkami do produktów. #
Domyślne przyciski WooCommerce Dodaj do koszyka wyświetlane na stronach z listą sklepów automatycznie dodają produkt do koszyka i przekierowują na stronę koszyka. W przypadku korzystania z rezerwacji FooEvents preferowane może być przekierowanie użytkownika przez stronę produktu, aby mógł najpierw dokonać wyboru miejsca i czasu rezerwacji przed przejściem do strony koszyka. Poniższy fragment kodu zastąpi link dodawania do koszyka linkiem do strony produktu. Dzięki temu użytkownik będzie mógł dokonać odpowiedniego wyboru rezerwacji na stronie produktu przed przejściem do koszyka lub strony kasy.
/** * @snippet Zmień przycisk WooCommerce "Dodaj do koszyka" na "Zobacz produkt * @source https://www.wptechnic.com/?p=4615 * @author Muhammad Tamzid * @compatible WC 4.3.1 */ // Zmień przycisk WooCommerce "Dodaj do koszyka" na "Wyświetl produkt add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 ); function wpt_custom_view_product_button( $button, $product ) { // Ignorowanie w przypadku zmiennych produktów if ( $product->is_type( 'variable' ) ) { return $button; } // Tekst przycisku tutaj $button_text = __( 'Zarezerwuj bilet', 'woocommerce' ); return '<a class="button wpt-custom-view-product-button" href="/pl/' . $product->get_permalink() . '/">' . $button_text . '</a>'; }
Wyświetlanie daty wydarzenia dla "pojedynczych" wydarzeń w koszyku i na stronie kasy. #
add_filter( 'woocommerce_cart_item_name', 'add_event_date_cart_checkout', 10, 3 ); function add_event_date_cart_checkout( $product_name, $cart_item, $cart_item_key ) { $product = $cart_item['data']; if ( $value = $product->get_meta( 'WooCommerceEventsDate' ) { $product_name .= '' . $value . ''; } return $product_name; }