Dit is een voor ontwikkelaars document. Als u niet bekend bent met code/templates en het oplossen van potentiële conflicten, neem dan contact op met een ontwikkelaar die bekend is met FooEvents en/of WooCommerce.
Belangrijk, eerst lezen #
Deze snippets worden geleverd als een hoffelijkheid en maken geen deel uit van de FooEvents productaanbod. Ze worden beschouwd als maatwerk en worden niet officieel ondersteund door FooEvents. Als zodanig bieden wij geen ondersteuning voor knipsels en aanpassingen volgens onze Servicevoorwaarden. Gebruik op eigen risico.
Bestellingen automatisch voltooien #
Hierdoor worden tickets automatisch verzonden zodra de betaling is ontvangen in plaats van dat de bestelling handmatig moet worden voltooid. Zorg ervoor dat uw evenementproducten zijn ingesteld op "Virtueel" en "Download"zoals uitgelegd in onze helpdocumentatieanders is de volgorde niet automatisch voltooien, zelfs als er is betaald.
Voeg de volgende code toe aan het functies.php bestand of via een plugin waarmee aangepaste functies kunnen worden toegevoegd, zoals de Codeknipsels plugin. Vermijd het rechtstreeks toevoegen van aangepaste code aan het hoofdthema functies.php bestand, omdat het wordt overschreven wanneer je het thema bijwerkt.
Je kunt de status "Voltooid" ook wijzigen in een andere bestelstatus, zoals "Verwerking".
/** * Voltooi alle WooCommerce bestellingen automatisch. */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' ); functie custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'voltooid' ); }
Toon de naam en het e-mailadres van de deelnemer in de beheerdersmail van de Nieuwe bestelling #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand. U kunt de e-mail waarin dit wordt weergegeven wijzigen door een andere haak.
. [php] add_action( 'woocommerce_email_klant_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); functie fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Details deelnemers</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets als $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Voornaam</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Achternaam</strong>: '.$icket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>E-mailadres</strong>: '.$icket['WooCommerceEventsAttendeeEmail'].'<br />'; echo "</p>"; } } }
Toon alle aangepaste deelnemersvelden zonder labels in de beheere-mail Nieuwe bestelling #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand. U kunt de e-mail waarin dit wordt weergegeven wijzigen door een andere haak.
. [php] add_action( 'woocommerce_email_klant_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); functie fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Details deelnemers</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets als $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Voornaam</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Achternaam</strong>: '.$icket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>E-mailadres</strong>: '.$icket['WooCommerceEventsAttendeeEmail'].'<br />'; foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] als $caf) { echo $caf.<br />'; } echo "</p>"; } } }
Aangepaste deelnemersvelden met labels weergeven in de beheermail van de nieuwe bestelling #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand. U kunt de e-mail waarin dit wordt weergegeven wijzigen door een andere haak. Zorg ervoor dat je "ovsxtmynwagotamjqieq" en "ruzwhgbuhzuzzdwnnaxe" in de voorbeeldcode vervangt door jouw specifieke code voor het aangepaste aanwezigheidsveld. Je kunt deze informatie vinden als je een ticket bewerkt en naar elk aangepast aanwezigheidsveld zoekt in het gedeelte "Aangepaste velden". Je moet elk aangepast aanwezigheidsveld en het bijbehorende label afzonderlijk toevoegen.
. [php] add_action( 'woocommerce_email_klant_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); functie fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Details deelnemers</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets als $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Voornaam</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Achternaam</strong>: '.$icket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>E-mailadres</strong>: '.$icket['WooCommerceEventsAttendeeEmail'].'<br />'; echo '<strong>Verjaardag</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq'].'<br />'; echo '<strong>Favoriete nummer</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe'].'<br />'; echo "</p>"; } } }
De begintijd van een evenement weergeven op de evenementlijst #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand. Geef de tijd weer door CSS toe te voegen voor de klasse 'fooevents-date'.
Verander de plaatsing van de tijd door een andere haak.
. [php] functie 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]
Geregistreerde deelnemers weergeven in een tabel #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand om alle geregistreerde bezoekers van je evenement in een tabelraster weer te geven. Nadat je het codefragment hebt toegevoegd, kun je de shortcode als volgt gebruiken:
[fooevents_attendees].
om alle aanwezigen voor alle evenementen weer te geven, of op deze manier:
[fooevents_attendees product_id=123]
waarbij "123" de ID is van het evenement waarvoor je de aanwezigheidslijst wilt weergeven.
functie 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( 'relatie' => 'OR', array( 'key' => 'WooCommerceEventsProductID', 'waarde' => $product_id, vergelijk' => 'LIKE'. ) ) ); $the_query = nieuwe WP_Query( $args ); if( $the_query->have_posts() ): while ( $the_query->have_posts() ) : $the_query->de_post(); $postid = $the_query->post->ID; // uitvoer van alle bevindingen - AANPASSEN NAAR JOUW LIKING $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]
De evenementdatum voor de titel weergeven op de productpagina #
Wijzig de plaatsing van de datum door een andere haak.
. [php] functie 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' );
Als je de datum van het evenement beschikbaar wilt maken als een shortcode, kun je de volgende regel toevoegen onder de functie:
add_shortcode( "fooevents_date_on_single", "fooevents_display_date_on_single");
Dan kun je de shortcode [fooevents_date_on_single]
om de datum van het evenement op de pagina weer te geven.
Vervang het stoelpictogram op de tafelschikking door een andere afbeelding #
Wijzig het volgende CSS-codefragment door de URL toe te voegen aan een andere afbeelding die je wilt gebruiken ter vervanging van de standaardafbeelding van de stoel voor alle stoelen. Voeg het gewijzigde codefragment toe aan het CSS-bestand van je thema.
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { achtergrond-afbeelding: url(../images/seat.svg); }
Verwijder het stoelpictogram op de tafelschikking zodat stoelen worden weergegeven als vakken #
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { achtergrondbeeld: geen; }
De richting van de stoelnummers op de tafelschikking wijzigen #
#fooevents_seating_dialog .fooevents_seating_chart_view_row { weergave: flex; flex-richting: rij-omgekeerd; justify-inhoud: flex-einde; }
Toon oneven genummerde zitplaatsen aan de rechterkant en even genummerde zitplaatsen aan de linkerkant #
#fooevents_seating_dialog .fooevents_seating_chart_view_row > span:nth-of-type(even) { zweven: links; }
Zitplaatsen in het midden van de tafelschikking weergeven #
[css] #fooevents_seating_dialog .fooevents_seating_chart_view_row_name, #fooevents_seating_dialog .fooevents_seating_chart_view_row { tekst-uitlijning: centreren; } [/css].
Laat de tafelschikking horizontaal scrollen in plaats van stoelen in de volgende rij weer te geven #
Dit kan handig zijn als je veel stoelen per rij hebt en je ze naast elkaar wilt weergeven in plaats van op de volgende rij als ze niet op één regel passen.
#fooevents_seating_dialog .fooevents_seating_chart_view_row { overflow-x: scroll; witruimte: nowrap; }
Toon een kalenderrooster op desktops en een kalenderweeklijst op mobiel #
Voeg twee kalender shortcodes toe aan de pagina of post waar je je kalender wilt weergeven. De eerste shortcode geeft een kalenderrooster weer en moet er als volgt uitzien:
[fooevents_calendar id="desktop"].
De tweede shortcode geeft een kalenderweeklijst weer en zou er als volgt uit moeten zien:
[fooevents_calendar id="mobile" defaultView="listWeek"]
Voeg het volgende CSS-codefragment toe aan het aangepaste CSS-bestand van je thema. Zorg ervoor dat de CSS ID selector waarde hetzelfde is als de waarde van het "id" attribuut dat je hebt opgegeven in de shortcode. Je kunt de eigenschap "max-width" aanpassen aan de schermgrootte waarop je wilt dat de kalenderweeklijst wordt weergegeven en het kalenderraster wordt verborgen.
#desktop_voedselgebeurtenissen_kalender { weergave: blok; } #mobile_fooevents_calendar { display: none; } @media screen and (max-width: 600px) { #desktop_voedselgebeurtenissen_kalender { display: none; } #mobile_fooevents_calendar { display: block; } }
De positie van het pictogram Kopieer kopersgegevens wijzigen #
Het volgende fragment lijnt de kopieerknop uit aan de rechterkant van het label met de eerste naam:
.fooevents-copy-from-purchaser { zwevend: rechts; marge-bodem:-1.7em }
Als u geen labels gebruikt maar plaatsaanduidingen voor invoer, gebruik dan het volgende codefragment:
.fooevents-copy-from-purchaser { zwevend: rechts; marge boven:-2em }
Toon het tabblad "Gebeurtenisdetails" als eerste op de pagina van de gebeurtenis #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand.
add_filter( 'woocommerce_product_tabs', 'reorder_tabs', 98 ); functie herbestel_tabs( $tabs ) { $tabs['woocommerce_events']['priority'] = 1; return $tabs; }
Verwijs alle knoppen 'Toevoegen aan winkelwagentje' naar productpagina's #
Als een product een eenvoudig product is, zal de knop 'Toevoegen aan winkelwagen' standaard automatisch een product toevoegen aan de winkelwagen van de klant. Bij gebruik van de FooEvents Boekingen extensie, kan het nodig zijn dat uw klanten eerst naar de productpagina om de boeking datum en slot te selecteren. Het volgende fragment zorgt ervoor dat wanneer de knop 'Toevoegen aan winkelwagentje' wordt aangeklikt voor eenvoudige producten, de gebruiker wordt doorgestuurd naar de productpagina.
add_filter( 'woocommerce_loop_add_to_cart_link', 'fooevents_modify_add_to_cart_button_url', 10, 2 ); functie 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="/nl/' . $button_link . '/">' . $button_text . '</a>'; return $button; } }
GRATIS weergeven als de prijs van de gebeurtenis is ingesteld op nul (0) #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand als je evenementen en producten met een prijs van "0" wilt wijzigen in "GRATIS". Je kunt ook het woord "GRATIS" vervangen door een ander woord of een andere zin of het leeg laten als je niets wilt weergeven.
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; }
Producten en variaties (tickets) weergeven in een rasterindeling in tabelvorm #
Voeg het volgende codefragment toe aan uw thema's functies.php bestand om producten en variaties in een tabelraster weer te geven op de evenement-/productpagina in plaats van de standaard vervolgkeuzelijst. Elke ticketoptie wordt weergegeven in een nieuwe rij en heeft zijn eigen hoeveelheidkiezer.
Let op: Dit codefragment is niet compatibel met de FooEvents Stoel en de Zitopties weergeven op productpagina's optie. Het zou moeten werken met zitplaatsen als je de tafelschikking alleen weergeeft op de afrekenpagina.
/** Add your event IDs in array like this * if you only want certain events * to display variations in a table: * array( 123, 456 ) */ $products = array( ); $products_multi_button = array( ); /** * Add multiple variations with quantities at once in add to cart url using notation "<product_id or variation_id>:<product_quantity>,..." */ function fooevents_add_multiple_products_to_cart( $url = false ) { if ( ! empty( $_GET['add-to-cart'] ) ) { // Make sure WC is installed and add-to-cart query arg exists if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) ) { return; } // Remove WooCommerce's hook since it doesn't handle multiple products/variations remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 ); $product_ids = explode( ',', $_REQUEST['add-to-cart'] ); $count = count( $product_ids ); $number = 0; foreach ( $product_ids as $id_and_quantity ) { if ( ! empty( $_GET['fooevents_bookings_method'] ) ) { $_POST['fooevents_bookings_method'] = $_GET['fooevents_bookings_method']; } else { $_POST['fooevents_bookings_method'] = 'slotdate'; } if ( ! empty( $_GET['bookings_sid'] ) ) { $_POST['fooevents_bookings_slot_val__trans'] = $_GET['bookings_sid']; } if ( ! empty( $_GET['bookings_did'] ) ) { $_POST['fooevents_bookings_date_val__trans'] = $_GET['bookings_did']; } if ( ! empty( $_GET['bookings_slot_date'] ) ) { $_POST['fooevents_bookings_slot_date_val_trans'] = $_GET['bookings_slot_date']; } // Check for quantities defined in notation (<product_id or variation_id>:<product_quantity>) $id_and_quantity = explode( ':', $id_and_quantity ); $product_id = $id_and_quantity[0]; $_REQUEST['quantity'] = ! empty( $id_and_quantity[1] ) ? absint( $id_and_quantity[1] ) : 1; if ( ++$number === $count ) { // Send back to WooCommerce's add_to_cart_action method for handling. $_REQUEST['add-to-cart'] = $product_id; return WC_Form_Handler::add_to_cart_action( $url ); } $product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) ); $was_added_to_cart = false; $adding_to_cart = wc_get_product( $product_id ); if ( ! $adding_to_cart ) { continue; } $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart ); // Variable product handling if ( 'variable' === $add_to_cart_handler ) { fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_variable', $product_id ); // Grouped Products } elseif ( 'grouped' === $add_to_cart_handler ) { fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id ); // Custom Handler } elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ) { do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url ); // Simple Products } else { fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_simple', $product_id ); } } } } add_action( 'wp_loaded', 'fooevents_add_multiple_products_to_cart', 15 ); function fooevents_invoke_multiple_adds( $class_name, $methodName ) { if ( version_compare( phpversion(), '5.3', '<' ) ) { throw new Exception( 'PHP version does not support ReflectionClass::setAccessible()', __LINE__ ); } $args = func_get_args(); unset( $args[0], $args[1] ); $reflection = new ReflectionClass( $class_name ); $method = $reflection->getMethod( $methodName ); $method->setAccessible( true ); $args = array_merge( array( $reflection ), $args ); return call_user_func_array( array( $method, 'invoke' ), $args ); } /** * Display variations in a table format. */ function woocommerce_variable_add_to_cart() { global $product, $post, $products, $products_multi_button; $woocommerce_events_type = get_post_meta( $post->ID, 'WooCommerceEventsType', true ); // Comma separated list of product ID's that should display variations in table format. Leave empty to display all products ( e.g array() ) if ( in_array( $post->ID, $products ) || empty( $products ) ) { // Set default in each input box to 0 instead of 1 add_filter( 'woocommerce_quantity_input_args', 'fooevents_quantity_input_default', 10, 2 ); $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; } // Custom template ?> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20JavaScript%20to%20build%20add%20to%20cart%20link%20based%20on%20quantity%20inputs%20and%20booking%20slots%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20is_bookable%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20jQuery(document).ready(function%20()%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20link_original%20%3D%20jQuery(%22%23add_to_cart_link%22).attr('data-href')%20%2B%20%22%3Fadd-to-cart%3D%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20link%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Check%20if%20booking%20slots%20should%20show%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(%20jQuery(%20%22%23fooevents_bookings_slot_val__trans%22%20).length%20%7C%7C%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).length%20)%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20booking_settings_link%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_sid%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_did%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_method%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_slot_date%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20is_bookable%20%3D%20true%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_sid%20%3D%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_did%20%3D%20jQuery(%22%23fooevents_bookings_date_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_method%20%3D%20jQuery(%22%23fooevents_bookings_method%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_slot_date%20%3D%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_sid%20%3D%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_date_val__trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_did%20%3D%20jQuery(%22%23fooevents_bookings_date_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_slot_date%20%3D%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22.quantity%20input%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link%20%3D%20link_original%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20no_quantity%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22.variations%20tr%22).each(function()%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20var_id%20%3D%20jQuery(this).find(%22input%5Bname%3Dvariation_id%5D%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20total%20%3D%20jQuery(this).find(%22.quantity%20input%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(total%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20no_quantity%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link%20%2B%3D%20var_id%20%2B%20%22%3A%22%20%2B%20total%20%2B%20%22%2C%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(no_quantity%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).removeAttr('href')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20function%20updateLink(link%2Cbookings_sid%3D%22%22%2Cbookings_did%3D%22%22%2Cbookings_method%3D%22%22%2Cbookings_slot_date%3D%22%22)%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(is_bookable)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(bookings_sid%20!%3D%20%22%22%20%26%26%20bookings_did%20!%3D%20%22%22%20%26%26%20bookings_sid%20!%3D%20undefined%20%26%26%20bookings_did%20!%3D%20undefined)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1)%20%2B%20%22%26bookings_sid%3D%22%20%2B%20bookings_sid%20%2B%20%22%26bookings_did%3D%22%20%2B%20bookings_did%20%2B%20%22%26fooevents_bookings_method%3D%22%20%2B%20bookings_method)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%09%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(bookings_slot_date%20!%3D%20%22%22%20%26%26%20bookings_slot_date%20!%3D%20undefined)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1)%20%2B%20%22%26fooevents_bookings_method%3D%22%20%2B%20bookings_method%20%2B%20%22%26bookings_slot_date%3D%22%20%2B%20bookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%09%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" /> <form class="cart" action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'> <table class="variations variations-grid" cellspacing="0"> <tbody> <?php $variation = 0; foreach ( $variations as $key => $value ) { if ( ! $value['variation_is_visible'] ) { continue; } if ( $variation != $value['variation_id'] ) { if ( in_array( $post->ID, $products_multi_button ) ) { ?> <tr> <td> <?php foreach ( $value['attributes'] as $key => $val ) { $val = str_replace( array( '-', '_' ), ' ', $val ); printf( '<div class="attr attr-%s">%s</div>', $key, ucwords( $val ) ); } ?> </td> <td> <?php echo $value['price_html']; ?> </td> <?php if ( $value['is_in_stock'] ) { ?> <form class="cart" action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'> <td id="variation_<?php echo $value['variation_id']; ?>"> <?php woocommerce_quantity_input(); ?> <?php $variation_minimum_quantity = get_post_meta( $value['variation_id'], 'variation_minimum_allowed_quantity', true ); $variation_maximum_quantity = get_post_meta( $value['variation_id'], 'variation_maximum_allowed_quantity', true ); $variation_group_of_quantity = get_post_meta( $value['variation_id'], 'variation_group_of_quantity', true ); ?> <?php if ( isset( $variation_group_of_quantity ) ) { ?> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%09%09%09%09%09%09%09%09%09%09jQuery(document).ready(function(%24)%7B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22step%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22value%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22min%22%2C%20%3C%3Fphp%20echo%20%24variation_minimum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22max%22%2C%20%3C%3Fphp%20echo%20%24variation_maximum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%7D)%3B%0A%09%09%09%09%09%09%09%09%09%09%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" /> <?php } ?> </td> <td> <?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> Add to cart</button> </td> <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 ); ?>" /> </form> <?php } else { ?> <td colspan="2"> <p class="stock out-of-stock"><?php _e( 'This item is currently out of stock and unavailable.', 'woocommerce' ); ?></p> </td> <?php } ?> </tr> <?php } else { ?> <tr> <td style="display:table-cell"> <?php foreach ( $value['attributes'] as $key => $val ) { $val = str_replace( array( '-', '_' ), ' ', $val ); printf( '<div class="attr attr-%s">%s</div>', $key, ucwords( $val ) ); } ?> </td> <td style="display:table-cell"> <?php echo $value['price_html']; ?> </td> <?php if ( $value['is_in_stock'] ) { ?> <td id="variation_<?php echo $value['variation_id']; ?>" style="display:table-cell"> <?php woocommerce_quantity_input(); ?> <?php $variation_minimum_quantity = get_post_meta( $value['variation_id'], 'variation_minimum_allowed_quantity', true ); $variation_maximum_quantity = get_post_meta( $value['variation_id'], 'variation_maximum_allowed_quantity', true ); $variation_group_of_quantity = get_post_meta( $value['variation_id'], 'variation_group_of_quantity', true ); ?> <?php if ( isset( $variation_group_of_quantity ) ) { ?> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%09%09%09%09%09%09%09%09%09%09jQuery(document).ready(function(%24)%7B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22step%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22value%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22min%22%2C%20%3C%3Fphp%20echo%20%24variation_minimum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22max%22%2C%20%3C%3Fphp%20echo%20%24variation_maximum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%7D)%3B%0A%09%09%09%09%09%09%09%09%09%09%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" /> <?php } ?> </td> <td style="display:table-cell"> <?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 } } ?> </td> <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 ); ?>" /> </form> <?php } else { ?> <td colspan="2" style="display:table-cell"> <p class="stock out-of-stock"><?php _e( 'This item is currently out of stock and unavailable.', 'woocommerce' ); ?></p> </td> <?php } ?> </tr> <?php } ?> <?php $variation = $value['variation_id']; } } ?> </tbody> </table> <?php if ( ! in_array( $post->ID, $products_multi_button ) ) { ?> <?php do_action( 'fooevents_output_booking_details' ); ?> <p class="form-row"> <a id="add_to_cart_link" data-href="<?php echo esc_url( $product->add_to_cart_url() ); ?>" type="submit" class="single_add_to_cart_button btn btn-primary button alt wp-element-button"><span class="glyphicon glyphicon-tag"></span> Add to cart</a> </p> <?php } ?> </form> <?php } else { // Enqueue variation scripts. wp_enqueue_script( 'wc-add-to-cart-variation' ); // Get Available variations? $get_variations = count( $product->get_children() ) <= apply_filters( 'woocommerce_ajax_variation_threshold', 30, $product ); // Load the template. wc_get_template( 'single-product/add-to-cart/variable.php', array( 'available_variations' => $get_variations ? $product->get_available_variations() : false, 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_default_attributes(), ) ); } } function find_valid_variations() { global $product, $post; $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; } function fooevents_quantity_input_default( $args, $product ) { $args['input_value'] = 0; return $args; } /** * Adds booking slot dropdowns only to single product page if the event is "Bookable" */ function fooevents_add_booking_slots() { global $post, $products; $wc_product = wc_get_product( $post->ID ); $woocommerce_events_type = get_post_meta( $post->ID, 'WooCommerceEventsType', true ); if ( is_plugin_active( 'fooevents_bookings/fooevents-bookings.php' ) || is_plugin_active_for_network( 'fooevents_bookings/fooevents-bookings.php' ) ) { if ( is_product() && $woocommerce_events_type == 'bookings' && ( in_array( $post->ID, $products ) || empty( $products ) ) && $wc_product->is_type( 'variable' ) ) { $fooevents_bookings = new Fooevents_Bookings(); add_action( 'fooevents_output_booking_details', array( $fooevents_bookings, 'output_booking_fields_product' ) ); } } } add_action( 'wp', 'fooevents_add_booking_slots' );
Ondersteuning voor dagelijkse begin- en eindtijden toevoegen aan je ticket thema's #
Vanaf versie 1.5.5 van de FooEvents Meerdaags plugin kun je verschillende begin- en eindtijden selecteren voor elke dag van een meerdaags evenement. Ondersteuning voor deze functie is ook toegevoegd aan alle FooEvents Kaartjesthema's. Alsjeblieft volg deze instructies om een bestaand ticket-thema bij te werken. Als je een aangepast ticket-thema gebruikt en niet in staat bent om het ticket-thema te vervangen door de bijgewerkte versie, voeg dan het volgende codefragment toe aan je ticket-thema om ondersteuning voor begin- en eindtijden toe te voegen. [php]
<!-- MULTI-DAY DETAILS --> <strong><?php printf( __( '%1$s %2$d: ', 'woocommerce-events' ), $ticket['dayTerm'], $x ); ?></strong> <?php echo esc_attr( $date ); ?><br /> <br />
De standaard WooCommerce Toevoegen aan winkelwagentje knop links vervangen door product links #
De standaard WooCommerce Toevoegen aan winkelwagen knoppen weergegeven op de winkel aanbieding pagina's zal automatisch een product toe te voegen aan de winkelwagen en omleiden naar de winkelwagen pagina. Bij het gebruik van FooEvents Boekingen, kunt u de voorkeur aan de gebruiker kanaal via de productpagina, zodat ze eerst een slot en tijd boeking selectie te maken voordat u verder gaat naar de winkelwagen pagina. Het volgende knipsel vervangt de link Toevoegen aan winkelwagentje door een link naar de productpagina. Dit zorgt ervoor dat de gebruiker de juiste boekingsselectie kan maken op de productpagina voordat hij doorgaat naar de winkelwagen- of afrekenpagina.
/** * @snippet Verander WooCommerce knop 'In winkelwagen' in 'Product bekijken'. * @bron https://www.wptechnic.com/?p=4615 * @author Mohammed Tamzid * compatibel met WC 4.3.1 */ // Verander WooCommerce 'Toevoegen aan winkelwagentje'-knop in 'Product bekijken add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 ); functie wpt_custom_view_product_button( $button, $product ) { // Negeren voor variabele producten if ( $product->is_type( 'variabel' ) ) { return $button; } // Knoptekst hier $button_text = __( 'Boek Ticket', 'woocommerce' ); return '<a class="button wpt-custom-view-product-button" href="/nl/' . $product->get_permalink() . '/">' . $button_text . '</a>'; }
De evenementdatum weergeven voor "Enkele" evenementen in de winkelwagen en op de afrekenpagina #
add_filter( "woocommerce_cart_item_name", "add_event_date_cart_checkout", 10, 3 ); functie 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; }