Themen

⌘K
  1. Themen
  2. Code-Schnipsel

Code-Schnipsel

Dies ist eine Entwicklerebene Dokument. Wenn Sie mit Code/Vorlagen und der Lösung möglicher Konflikte nicht vertraut sind, wenden Sie sich bitte an einen Entwickler, der mit FooEvents und/oder WooCommerce vertraut ist.

Wichtig, bitte zuerst lesen #

Diese Snippets werden aus Höflichkeit zur Verfügung gestellt und sind nicht Teil des FooEvents-Produktangebots. Sie gelten als Anpassungen und werden nicht offiziell von FooEvents unterstützt. Daher bieten wir keinen Support für Snippets und Anpassungen im Sinne unserer Bedingungen der Dienstleistung. Die Verwendung erfolgt auf eigene Gefahr.

Automatisch Aufträge abschließen #

Auf diese Weise werden die Tickets automatisch nach Zahlungseingang verschickt, ohne dass Sie die Bestellung manuell abschließen müssen. Bitte stellen Sie sicher, dass Ihre Veranstaltungsprodukte auf "Virtuell" und "Herunterladbar", wie in unserer Hilfe-Dokumentationansonsten wird der Auftrag wird nicht automatisch abgeschlossen, auch wenn die Zahlung erfolgt ist.

Fügen Sie den folgenden Code in Ihr Child-Theme ein funktionen.php Datei oder über ein Plugin, das das Hinzufügen von benutzerdefinierten Funktionen ermöglicht, wie z. B. die Code-Schnipsel Plugin. Vermeiden Sie es, benutzerdefinierten Code direkt in das übergeordnete Theme einzufügen. funktionen.php Datei, da sie überschrieben wird, wenn Sie das Thema aktualisieren.

Sie können den Status "Abgeschlossen" auch in einen anderen Auftragsstatus wie "In Bearbeitung" ändern.

/**
 * Alle WooCommerce-Aufträge automatisch abschließen.
 */
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
    if ( ! 1TP14Bestellung_id ) {
        zurück;
    }

    $order = wc_get_order( $order_id );
    $order->update_status( 'completed' );
}

Zeigen Sie den Namen und die E-Mail-Adresse des Teilnehmers in der Verwaltungs-E-Mail des neuen Auftrags an. #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei. Sie können die E-Mail, in der sie angezeigt wird, ändern, indem Sie eine andere Haken.

.

[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>Teilnehmer-Details</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach(1TP12Event as $ticket) {
            echo "<p>";
            echo '<strong>Vorname</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
            echo '<strong>Nachname</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
            echo '<strong>E-Mail Adresse</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
            echo "</p>";
        }
    }
}

Anzeige aller benutzerdefinierten Teilnehmerfelder ohne Beschriftung in der Verwaltungs-E-Mail für neue Aufträge #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei. Sie können die E-Mail, in der sie angezeigt wird, ändern, indem Sie eine andere Haken.

.

[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>Teilnehmer-Details</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach(1TP12Event as $ticket) {
            echo "<p>";
            echo '<strong>Vorname</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
            echo '<strong>Nachname</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
            echo '<strong>E-Mail Adresse</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
            foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) {
                 echo $caf.'<br />';
            }
            echo "</p>";
        }
    }
}

Benutzerdefinierte Teilnehmerfelder mit Beschriftungen in der Verwaltungs-E-Mail für neue Aufträge anzeigen #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei. Sie können die E-Mail, in der sie angezeigt wird, ändern, indem Sie eine andere Haken. Stellen Sie sicher, dass Sie "ovsxtmynwagotamjqieq" und "ruzwhgbuhzuzzdwnnaxe" im Beispielcode durch den Code für Ihr eigenes Teilnehmerfeld ersetzen. Sie finden diese Informationen, wenn Sie ein Ticket bearbeiten und im Abschnitt "Benutzerdefinierte Felder" nach jedem benutzerdefinierten Teilnehmerfeld suchen. Sie müssen jedes benutzerdefinierte Teilnehmerfeld und seine Bezeichnung einzeln hinzufügen.

.

[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>Teilnehmer-Details</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach(1TP12Event as $ticket) {
            echo "<p>";
            echo '<strong>Vorname</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
            echo '<strong>Nachname</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
            echo '<strong>E-Mail Adresse</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
            echo '<strong>Geburtstag</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq']'.<br />';
            echo '<strong>Lieblingslied</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe']'.<br />';
            echo "</p>";
        }
    }
}

Startzeit der Veranstaltung in der Veranstaltungsliste anzeigen #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei. Gestalten Sie die Anzeige der Uhrzeit, indem Sie CSS für die Klasse "fooevents-date" hinzufügen.

Ändern Sie die Platzierung der Uhrzeit, indem Sie eine andere Haken.

.

[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-&gt;ID, 'WooCommerceEventsHour', true).':';
echo get_post_meta($post-&gt;ID, 'WooCommerceEventsMinutes', true). ' ';
echo get_post_meta($post-&gt;ID, 'WooCommerceEventsPeriod', true);
echo '</div>';
}
}
add_filter( 'woocommerce_after_shop_loop_item_title', 'fooevents_display_time_in_shop_listing', 35 );[/php]

Anzeige der registrierten Teilnehmer in einem Tabellenformat #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei, um alle registrierten Teilnehmer an Ihrer Veranstaltung in einem Tabellengitterformat auszugeben. Nach dem Hinzufügen des Codeschnipsels können Sie den Shortcode wie folgt verwenden:

[fooevents_attendees]

um alle Teilnehmer für alle Veranstaltungen anzuzeigen, oder wie folgt:

[fooevents_attendees product_id=123]

wobei "123" die ID der Veranstaltung ist, für die Sie die Teilnehmerliste anzeigen möchten.

function fooevents_display_attendees($attributes) {
 
  $product_id='';
  if(!empty($attributes['product_id'])) {
    $product_id = $attributes['product_id'];
  }

  $output ='';
  $args = array(
    'AnzahlPosts' =&gt; -1,
    'posts_per_page' =&gt; -1,
    'post_type' =&gt; 'event_magic_tickets',
    'meta_query' =&gt; array(
      'relation' =&gt; 'OR',
      array(
        'key' =&gt; 'WooCommerceEventsProductID',
        'value' =&gt; $product_id,
        'compare' =&gt; 'LIKE'
      )
    )
  );

   $he_query = new WP_Query( $args );

  if( $the_query-&gt;have_posts() ):
    while ( $the_query-&gt;have_posts() ) : $the_query-&gt;the_post();
    $postid = $the_query-&gt;post-&gt;ID;
     
      // Ausgabe aller Ergebnisse - CUSTOMIZE TO YOUR 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]

Anzeige des Veranstaltungsdatums vor dem Titel auf der Produktseite #

Ändern Sie die Platzierung des Datums durch Verwendung eines anderen Haken.

.

[php]
function fooevents_display_date_on_single() {
  global $post;
  $product = wc_get_product( $post-&gt;ID );
  $start_date = $product-&gt;get_meta( 'WooCommerceEventsDate' );
  $end_date = $product-&gt;get_meta( 'WooCommerceEventsEndDate' );
  if ( 1TP12Ende_datum ) {
    printf(
      '<h3>%s</h3>',
      esc_html( 1TP12Startdatum . ' - ' . 1TP12Ende_datum )
    );
  } else if( $start_datum ) {
    printf(
      '<h3>%s</h3>',
      esc_html( $start_date )
    );
  }
}
add_action( 'woocommerce_single_product_summary', 'fooevents_display_date_on_single' );

Wenn Sie das Veranstaltungsdatum als Shortcode zur Verfügung stellen möchten, können Sie die folgende Zeile unterhalb der Funktion hinzufügen:

add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');

Dann können Sie den Shortcode [fooevents_date_on_single] um das Ereignisdatum auf der Seite anzuzeigen.

Ersetzen Sie das Sitzplatzsymbol auf dem Sitzplan durch ein anderes Bild #

Ändern Sie das folgende CSS-Codefragment, indem Sie die URL zu einem anderen Bild hinzufügen, das das Standardbild für alle Sitze ersetzen soll. Fügen Sie den geänderten Codeschnipsel in die benutzerdefinierte CSS-Datei Ihres Themes ein.

#fooevents_bestuhlung_dialog .fooevents_bestuhlung_grafik_ansicht_zeile span {
  background-image: url(../images/seat.svg);
}

Entfernen Sie das Sitzplatzsymbol auf dem Sitzplan, damit die Plätze als Kästchen angezeigt werden. #

#fooevents_bestuhlung_dialog .fooevents_bestuhlung_grafik_ansicht_zeile span {
  background-image: none;
}

Ändern Sie die Richtung der Sitzplatznummern auf dem Sitzplan #

#fooevents_bestuhlung_dialog .fooevents_bestuhlung_diagramm_ansicht_zeile {
  Anzeige: flex;
  flex-direction: row-reverse;
  justify-content: flex-end;
}

Zeigen Sie ungerade Sitzplätze auf der rechten Seite und gerade Sitzplätze auf der linken Seite an. #

#fooevents_bestuhlung_dialog .fooevents_bestuhlung_diagramm_ansicht_zeile > span:nth-of-type(even) {
  float: links;
}

Sitzplätze in der Mitte des Sitzplans anzeigen #

[css]
#fooevents_bestuhlung_dialog .fooevents_bestuhlung_grafik_ansicht_zeile_name,
#fooevents_bestuhlung_dialog .fooevents_bestuhlung_diagramm_ansicht_zeile {
  text-align: zentriert;
}
[/css]

Den Sitzplan horizontal scrollen lassen, anstatt die Plätze in der nächsten Reihe anzuzeigen #

Dies kann nützlich sein, wenn Sie viele Sitze pro Reihe haben und diese nebeneinander statt in der nächsten Reihe angezeigt werden sollen, wenn sie nicht in eine Zeile passen.

#fooevents_bestuhlung_dialog .fooevents_bestuhlung_diagramm_ansicht_zeile {
  overflow-x: scroll;
  white-space: nowrap;
}

Anzeige eines Kalendergitters auf Desktops und einer Kalenderwochenliste auf Mobiltelefonen #

Fügen Sie zwei Kalender-Shortcodes auf der Seite oder dem Beitrag ein, auf der/dem Sie Ihren Kalender anzeigen möchten. Der erste Shortcode zeigt ein Kalendergitter an und sollte wie folgt aussehen:

[fooevents_calendar id="desktop"]

Der zweite Shortcode zeigt eine Kalenderwochenliste an und sollte wie folgt aussehen:

[fooevents_calendar id="mobile" defaultView="listWeek"]

Fügen Sie das folgende CSS-Codefragment in die benutzerdefinierte CSS-Datei Ihres Themas ein. Stellen Sie sicher, dass der Wert des CSS-ID-Selektors mit dem Wert des Attributs "id" übereinstimmt, das Sie im Shortcode angegeben haben. Sie können die Eigenschaft "max-width" an die Bildschirmgröße anpassen, bei der Sie die Kalenderwochenliste anzeigen und das Kalendergitter ausblenden möchten.

#desktop_fooevents_calendar {
  Anzeige: Block;
}
    
#mobile_fooevents_calendar {
  display: none;
}
    
@media screen and (max-width: 600px) {
  #desktop_fooevents_calendar {
    Anzeige: keine;
  }
    
  #mobile_fooevents_calendar {
    Anzeige: block;
  }    
}

Ändern Sie die Position des Symbols "Details des Käufers kopieren #

Mit dem folgenden Ausschnitt wird die Kopierschaltfläche rechts von der Beschriftung des Vornamens ausgerichtet:

.fooevents-copy-from-purchaser {
	float: rechts;
	margin-bottom:-1.7em
}

Wenn Sie keine Beschriftungen, sondern Eingabeplatzhalter verwenden, benutzen Sie bitte den folgenden Codeschnipsel:

.fooevents-copy-from-purchaser {
	float: rechts;
	margin-top:-2em
}

Zeigen Sie auf der Ereignisseite zuerst die Registerkarte "Ereignisdetails" an. #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei.

add_filter( 'woocommerce_product_tabs', 'reorder_tabs', 98 );
function reorder_tabs( $tabs ) {

    $tabs['woocommerce_events']['priority'] = 1;
    return $tabs;

}

Alle "In den Warenkorb"-Schaltflächen auf Produktseiten verweisen #

Wenn es sich bei einem Produkt um ein einfaches Produkt handelt, wird das Produkt über die Schaltfläche "In den Warenkorb" automatisch in den Warenkorb des Kunden gelegt. Wenn Sie die FooEvents Buchungserweiterung verwenden, kann es erforderlich sein, dass Ihre Kunden zuerst auf die Produktseite gehen, um das Buchungsdatum und den Termin auszuwählen. Das folgende Snippet stellt sicher, dass der Benutzer zur Produktseite weitergeleitet wird, wenn er auf die Schaltfläche "In den Warenkorb" für einfache Produkte klickt.

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-&gt;add_to_cart_text();
        $button_link = $product-&gt;get_permalink();
        $button = '<a class="button" href="/de/' . $button_link . '/">' . $button_text . '</a>';
        return $button;
    }
}

Anzeige FREE, wenn der Ereignispreis auf Null (0) gesetzt ist #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei, wenn Sie Ereignisse und Produkte mit einem Preis von "0" in "FREE" ändern möchten. Sie können das Wort "KOSTENLOS" auch durch ein anderes Wort oder eine andere Phrase ersetzen oder es leer lassen, wenn Sie nicht möchten, dass etwas angezeigt wird.

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;
}

Anzeige von Produkten und Variationen (Tickets) in einem Tabellengitterformat #

Fügen Sie den folgenden Codeschnipsel zu Ihrem Theme hinzu funktionen.php Datei, um Produkte und Variationen in einem Tabellengitterformat auf der Veranstaltungs-/Produktseite anstelle der Standard-Dropdown-Liste anzuzeigen. Jede Ticketoption wird in einer neuen Zeile aufgeführt und hat eine eigene Mengenauswahl.

Bitte beachten: Dieser Codeschnipsel ist nicht kompatibel mit dem FooEvents Sitzplätze und die Anzeige von Sitzplatzoptionen auf Produktseiten Option. Es sollte mit Sitzplatzveranstaltungen funktionieren, wenn Sie die Sitzplatzkarte nur auf der Kassenseite anzeigen.

/** 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="&lt;script&gt;" title="&lt;script&gt;" />
        <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="&lt;script&gt;" title="&lt;script&gt;" />                                  
                                    <?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="&lt;script&gt;" title="&lt;script&gt;" />
                                    <?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' );

Fügen Sie Ihren Ticket-Themen Unterstützung für tägliche Start- und Endzeiten hinzu #

Ab der Version 1.5.5 der FooEvents Mehrtägig Plugin können Sie unterschiedliche Start- und Endzeiten für jeden Tag eines Jahres auswählen. mehrtägige Veranstaltung. Unterstützung für diese Funktion wurde auch in alle FooEvents Ticket-Themen. Bitte diese Anweisungen befolgen um ein bestehendes Ticket-Thema zu aktualisieren. Wenn Sie ein benutzerdefiniertes Ticket-Thema verwenden und nicht in der Lage sind, das Ticket-Thema durch die aktualisierte Version zu ersetzen, fügen Sie bitte den folgenden Codeschnipsel zu Ihrem Ticket-Thema hinzu, um Unterstützung für Start- und Endzeiten hinzuzufügen. [php]

<!-- MULTI-DAY DETAILS -->
										

			<strong><?php printf( __( '%1$s %2$d: ', 'woocommerce-events' ), $ticket['dayTerm'], $x ); ?></strong>
			<?php echo esc_attr( $date ); ?><br /> 
				
		<br />

Die standardmäßigen WooCommerce-Schaltflächen "In den Warenkorb", die auf den Seiten des Shops angezeigt werden, fügen automatisch ein Produkt zum Warenkorb hinzu und leiten zur Warenkorb-Seite weiter. Wenn Sie FooEvents Bookings verwenden, möchten Sie den Benutzer vielleicht lieber über die Produktseite leiten, damit er zunächst einen Termin und eine Uhrzeit für die Buchung auswählen kann, bevor er zur Warenkorbseite weitergeht. Das folgende Snippet ersetzt den "Add-to-cart"-Link durch einen Link auf die Produktseite. Dadurch wird sichergestellt, dass der Benutzer die entsprechende Buchungsauswahl auf der Produktseite treffen kann, bevor er zur Warenkorb- oder Kassenseite weitergeht.

/**
* @snippet WooCommerce Schaltfläche 'In den Warenkorb' in 'Produkt anzeigen' ändern
* @source https://www.wptechnic.com/?p=4615
* @Autor Muhammad Tamzid
* @compatible WC 4.3.1
*/
// Ändern Sie die Schaltfläche WooCommerce 'In den Warenkorb' in 'Produkt anzeigen'.
add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 );
function wpt_custom_view_product_button( $button, $product ) {
    // Bei variablen Produkten ignorieren
    if ( $product-&gt;is_type( 'variable' ) ) {
        return $button;
    }
    // Text der Schaltfläche hier
    $button_text = __( 'Ticket buchen', 'woocommerce' );
    return '<a class="button wpt-custom-view-product-button" href="/de/' . $product->get_permalink() . '/">' . $button_text . '</a>';
}

Anzeige des Veranstaltungsdatums für "Einzel"-Veranstaltungen im Warenkorb und auf der Kassenseite #

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;
}

Artikel

Schlagwörter , , , , , , , , , , , , , , , , , , ,