Snippet di codice

Questo è un A livello di sviluppatore documento. Se non si ha dimestichezza con il codice/template e la risoluzione di potenziali conflitti, si consiglia di rivolgersi a uno sviluppatore che abbia familiarità con l'FooEvents e/o l'WooCommerce.

Importante, leggere prima

Questi snippet sono forniti a titolo di cortesia e non fanno parte dell'offerta di prodotti FooEvents. Sono considerati personalizzazioni e non sono ufficialmente supportati da FooEvents. Di conseguenza, non forniamo supporto per gli snippet e le personalizzazioni, come previsto dalla nostra Termini di servizio. Utilizzare a proprio rischio e pericolo.

Completare automaticamente gli ordini

Questo permette di inviare automaticamente i biglietti una volta ricevuto il pagamento, invece di dover completare manualmente l'ordine. Assicuratevi che i prodotti dell'evento siano impostati su "Virtuale" e "Scaricabile", come spiegato nel nostro documentazione di aiuto, otherwise, the order will not complete automatically even if payment was made.

Aggiungere il seguente codice al tema figlio functions.php o tramite un plugin che permetta di aggiungere funzioni personalizzate, come il file Snippet di codice plugin. Evitare di aggiungere codice personalizzato direttamente al tema padre functions.php perché verrà sovrascritto quando si aggiorna il tema.

Si può anche cambiare lo stato "Completato" con un altro stato dell'ordine, ad esempio "In elaborazione".

/**
 * @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';
}

Si noti che lo snippet di codice di cui sopra non funziona con gli ordini in contrassegno / BACS / Assegno quando il totale dell'ordine è > 0. Controllare il plugin gratuito su questa pagina per risolvere il problema.

Mostra il nome e l'email del partecipante nell'email di amministrazione del Nuovo Ordine

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php file. È possibile cambiare l'email in cui viene visualizzato il file utilizzando un'email diversa. gancio.

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>Attendee Details</h3>";
	$WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>First Name</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			echo '<strong>Last Name</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			echo '<strong>Email Address</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
			echo "</p>";
		}
	}
}

Mostra tutti i campi personalizzati dei partecipanti senza etichette nell'e-mail di amministrazione del nuovo ordine

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php file. È possibile cambiare l'email in cui viene visualizzato il file utilizzando un'email diversa. gancio.

.

[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>Dettagli sui partecipanti</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach($event as $ticket) {
            echo "<p>";
            echo '<strong>Nome</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
            echo '<strong>Cognome</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
            echo '<strong>Indirizzo e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
            foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) {
                 echo $caf.'<br />';
            }
            echo "</p>";
        }
    }
}

Mostra i campi personalizzati dei partecipanti con le etichette nell'e-mail di amministrazione del Nuovo Ordine

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php file. È possibile cambiare l'email in cui viene visualizzato il file utilizzando un'email diversa. gancio. Assicurarsi di sostituire "ovsxtmynwagotamjqieq" e "ruzwhgbuhzuzzdwnnaxe" nel codice di esempio con il codice del campo personalizzato del partecipante. Potete trovare queste informazioni se modificate un biglietto e cercate ogni campo personalizzato del partecipante nella sezione "Campi personalizzati". È necessario aggiungere ogni campo personalizzato del partecipante e la sua etichetta individualmente.

.

[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>Dettagli sui partecipanti</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach($event as $ticket) {
            echo "<p>";
            echo '<strong>Nome</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
            echo '<strong>Cognome</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
            echo '<strong>Indirizzo e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
            echo '<strong>Compleanno</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq'].'<br />';
            echo '<strong>Canzone preferita</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe'].'<br />';
            echo "</p>";
        }
    }
}

Visualizzare l'ora di inizio dell'evento nell'elenco degli eventi

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php file. Per creare uno stile di visualizzazione dell'ora, aggiungere il CSS per la classe 'fooevents-date'.

Cambiate la posizione dell'ora utilizzando un'altra gancio.

function fooevents_display_time_in_shop_listing() {
global $post;
if (is_front_page() || is_home() || is_shop() || is_product_category() || is_product_tag()) {
echo '&lt;div class="fooevents-date"&gt;';
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 '&lt;/div&gt;';
}
}
add_filter( 'woocommerce_after_shop_loop_item_title', 'fooevents_display_time_in_shop_listing', 35 );

Visualizzare i partecipanti registrati in una tabella

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php per visualizzare tutti i partecipanti registrati all'evento in una tabella a griglia. Dopo aver aggiunto lo snippet di codice, è possibile utilizzare lo shortcode in questo modo:

[fooevents_attendees]

per visualizzare tutti i partecipanti a tutti gli eventi, oppure in questo modo:

[fooevents_attendees product_id=123]

dove "123" è l'ID dell'evento per il quale si desidera visualizzare l'elenco dei partecipanti.

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

	$output ='';
	$args = array(
	'numberposts' =&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'
		)
	)
	);  

	$the_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;
	 
		// output all findings - CUSTOMIZE TO YOUR LIKING
		$output .= "&lt;tr&gt;";
		$output .= "&lt;td&gt;".get_the_title()."&lt;/td&gt;";
		$output .= "&lt;td&gt;".get_post_meta($postid, 'WooCommerceEventsPurchaserFirstName', true)."&lt;/td&gt;";
		$output .= "&lt;td&gt;".get_post_meta($postid, 'WooCommerceEventsPurchaserLastName', true)."&lt;/td&gt;";
		$output .= "&lt;/tr&gt;";
		 
	endwhile;
	endif;
	wp_reset_query();
	$output ="&lt;table&gt;".$output."&lt;/table&gt;";
	return $output;
   
}
add_shortcode("fooevents_attendees", "fooevents_display_attendees");

Visualizzare la data dell'evento prima del titolo nella pagina del prodotto

Cambiate la posizione della data utilizzando un'altra gancio.

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 ( $end_date ) {
	printf(
		'&lt;h3&gt;%s&lt;/h3&gt;',
		esc_html( $start_date . ' - ' . $end_date )
	);
	} else if( $start_date ) {
	printf(
		'&lt;h3&gt;%s&lt;/h3&gt;',
		esc_html( $start_date )
	);
	}
}
add_action( 'woocommerce_single_product_summary', 'fooevents_display_date_on_single' );

Se si desidera rendere disponibile la data dell'evento come shortcode, è possibile aggiungere la seguente riga sotto la funzione:

add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');

Quindi è possibile utilizzare lo shortcode [fooevents_date_on_single] per visualizzare la data dell'evento nella pagina.

Sostituire l'icona del posto a sedere sulla tabella dei posti con un'immagine diversa.

Modificare il seguente frammento di codice CSS aggiungendo l'URL di un'immagine diversa che si desidera sostituire a quella predefinita per tutti i posti a sedere. Aggiungere il frammento di codice modificato al file CSS personalizzato del tema.

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

Rimuovete l'icona del posto a sedere sulla tabella dei posti a sedere in modo che i posti vengano visualizzati come scatole

#fooevents_seating_dialog .fooevents_seating_chart_view_row span {
	background-image: none;
}

Modificare la direzione dei numeri dei posti a sedere sulla tabella dei posti a sedere

#fooevents_seating_dialog .fooevents_seating_chart_view_row {
	display: flex;
	flex-direction: row-reverse;
	justify-content: flex-end;
}

Mostra i posti dispari a destra e quelli pari a sinistra.

#fooevents_seating_dialog .fooevents_seating_chart_view_row &gt; span:nth-of-type(even) {
	float: left;
}

Visualizzare i posti al centro della tabella dei posti a sedere

[css]
#fooevents_seating_dialog .fooevents_seating_chart_view_row_name,
#fooevents_seating_dialog .fooevents_seating_chart_view_row {
  text-align: center;
}
[/css]

Lasciare che la tabella dei posti a sedere scorra orizzontalmente invece di visualizzare i posti nella fila successiva

Questo può essere utile se si hanno molti posti per fila e si vuole che vengano visualizzati uno accanto all'altro invece che sulla fila successiva, se non si adattano a una riga.

#fooevents_seating_dialog .fooevents_seating_chart_view_row {
	overflow-x: scroll;
	white-space: nowrap;
}

Mostrare una griglia di calendario su desktop e un elenco di settimane di calendario su mobile

Aggiungete due shortcode di calendario nella pagina o nel post in cui volete visualizzare il calendario. Il primo shortcode visualizzerà una griglia di calendari e dovrebbe avere questo aspetto:

[fooevents_calendar id="desktop"]

Il secondo shortcode visualizzerà un elenco di settimane del calendario e dovrebbe avere questo aspetto:

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

Aggiungere il seguente frammento di codice CSS al file CSS personalizzato del tema. Assicurarsi che il valore del selettore CSS ID sia uguale al valore dell'attributo "id" specificato nel codice breve. È possibile regolare la proprietà "max-width" in base alla dimensione dello schermo in cui si desidera che l'elenco delle settimane del calendario sia visualizzato e la griglia del calendario sia nascosta.

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

Calendario dinamico

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php per visualizzare il calendario con solo il prodotto dell'evento corrente quando viene usato nelle descrizioni dei prodotti/pagine.

function dynamic_fooevents_calendar_shortcode() {
	if (is_product()) {
		global $product;
		if ($product) {
			$product_id = $product-&gt;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');

Dopo aver aggiunto lo snippet di codice, è possibile utilizzare lo shortcode in questo modo:

[dynamic_fooevents_calendar]

Modificare la posizione dell'icona Copia dei dettagli dell'acquirente

Lo snippet seguente allinea il pulsante di copia a destra dell'etichetta del nome:

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

Se non si utilizzano etichette, ma segnaposti di input, utilizzare il seguente frammento di codice:

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

Mostrare la scheda "Dettagli evento" per prima nella pagina dell'evento

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php file.

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

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

}

Indirizzare tutti i pulsanti "Aggiungi al carrello" alle pagine dei prodotti

Se un prodotto è un prodotto semplice, per impostazione predefinita, il pulsante "Aggiungi al carrello" aggiungerà automaticamente un prodotto al carrello del cliente. Se si utilizza l'estensione FooEvents Bookings, è possibile che i clienti debbano prima accedere alla pagina del prodotto per selezionare la data e la fascia oraria della prenotazione. Lo snippet seguente assicura che quando si fa clic sul pulsante 'Aggiungi al carrello' per i prodotti semplici, l'utente venga indirizzato alla pagina del prodotto.

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 = '&lt;a class="button" href="' . $button_link . '"&gt;' . $button_text . '&lt;/a&gt;';
		return $button;
	}
}

Visualizza FREE se il prezzo dell'evento è impostato su zero (0)

Aggiungete il seguente frammento di codice alla cartella del vostro tema functions.php se si desidera cambiare gli eventi e i prodotti con un prezzo di "0" in "GRATIS". È anche possibile sostituire la parola "GRATIS" con un'altra parola o frase o lasciarla vuota se non si desidera visualizzare nulla.

add_filter( 'woocommerce_get_price_html', 'wp_price_free_zero_empty', 100, 2 );
function wp_price_free_zero_empty( $price, $product ) {
	if ( '' === $product-&gt;get_price() || 0 == $product-&gt;get_price() ) {
		$price = 'FREE';
	}
	return $price;
}

I pulsanti predefiniti WooCommerce Aggiungi al carrello visualizzati sulle pagine degli elenchi dei negozi aggiungono automaticamente un prodotto al carrello e reindirizzano alla pagina del carrello. Quando si utilizzano le prenotazioni FooEvents, si potrebbe preferire incanalare l'utente attraverso la pagina del prodotto, in modo che possa prima effettuare una selezione di slot e orari di prenotazione prima di procedere alla pagina del carrello. Lo snippet seguente sostituisce il link al carrello con un link alla pagina del prodotto. In questo modo l'utente potrà effettuare la selezione di prenotazione appropriata nella pagina del prodotto prima di procedere al carrello o alla pagina di checkout.

/**
* @snippet Change WooCommerce ‘Add to Cart’ button to 'View Product'
* @source https://www.wptechnic.com/?p=4615
* @author Muhammad Tamzid
* @compatible WC 4.3.1
*/
// Change WooCommerce 'Add To Cart' button to 'View Product'
add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 );
function wpt_custom_view_product_button( $button, $product ) {
	// Ignore for variable products
	if ( $product-&gt;is_type( 'variable' ) ) {
		return $button;
	}
	// Button text here
	$button_text = __( 'Book Ticket', 'woocommerce' );
	return '&lt;a class="button wpt-custom-view-product-button" href="' . $product-&gt;get_permalink() . '"&gt;' . $button_text . '&lt;/a&gt;';
}

Visualizzare la data dell'evento per gli eventi "singoli" nel carrello e nella pagina di checkout

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-&gt;get_meta( 'WooCommerceEventsDate' ) ) {
		$product_name .= '&lt;small&gt;' . $value . '&lt;/small&gt;';
	}
	return $product_name;
}

Visualizzazione dei dati acquisiti con il plugin WooCommerce Product Add-ons nei biglietti dei partecipanti

È possibile aggiungere il seguente frammento di codice nel file codice del tema del biglietto per visualizzare le selezioni effettuate da tutti i partecipanti all'ordine. Si noti che questo frammento di codice visualizzerà tutti i dati acquisiti dai componenti aggiuntivi del prodotto WooCommerce per l'ordine nel suo complesso, ma non assegnerà le selezioni a partecipanti specifici, poiché queste informazioni non sono memorizzate nei singoli messaggi dei biglietti. Questo frammento di codice funziona meglio se inserito nel file header.php del tema dei biglietti e se è stato impostato in modo che l'acquirente riceva tutti i biglietti dei partecipanti.

$order = wc_get_order( $ticket["WooCommerceEventsOrderID"] );

$report_data = [];

foreach ( $order-&gt;get_items() as $item ) {
	// Get all meta data for the item
	$meta_data = $item-&gt;get_meta_data();
													
	foreach ( $meta_data as $meta ) {
		// We only want to count meta that comes from Product Add-ons. 
		// Most add-ons don't start with an underscore.
		if ( strpos( $meta-&gt;key, '_' ) === 0 ) continue;

		$label = $meta-&gt;key;
		$value = $meta-&gt;value;
		$qty   = $item-&gt;get_quantity();

		// 1. Check if it's a 10-digit numeric timestamp
		if ( is_numeric( $value ) &amp;&amp; strlen( $value ) === 10 ) {
			$value = date_i18n( get_option( 'date_format' ), (int) $value );
		} 
		// 2. Otherwise, check if it's a YYYY-MM-DD string
		elseif ( preg_match( '/^\d{4}-\d{2}-\d{2}$/', $value ) &amp;&amp; strtotime( $value ) ) {
			$value = date_i18n( get_option( 'date_format' ), strtotime( $value ) );
		}

		// Store in a nested array: [Label][Value] = Total Count
		if ( !isset( $report_data[$label][$value] ) ) {
			$report_data[$label][$value] = 0;
		}
		$report_data[$label][$value] += $qty;
	}
}

if ( ! empty( $report_data ) ) {
	echo '&lt;table align="center" style="width:80%; border-collapse: collapse; margin-top: 20px; font-family: sans-serif;"&gt;';
	echo '&lt;thead style="background-color: #f1f1f1;"&gt;';
	echo '&lt;tr&gt;';
	echo '&lt;th style="padding: 12px; border: 1px solid #ccc;"&gt;Add-on Group&lt;/th&gt;';
	echo '&lt;th style="padding: 12px; border: 1px solid #ccc;"&gt;Selection / Value&lt;/th&gt;';
	echo '&lt;th style="padding: 12px; border: 1px solid #ccc; text-align: center;"&gt;Total Count&lt;/th&gt;';
	echo '&lt;/tr&gt;';
	echo '&lt;/thead&gt;';
	echo '&lt;tbody&gt;';

	foreach ( $report_data as $label =&gt; $selections ) {
		foreach ( $selections as $value =&gt; $count ) {
			echo '&lt;tr&gt;';
			echo '&lt;td style="padding: 10px; border: 1px solid #eee;"&gt;&lt;strong&gt;' . esc_html( $label ) . '&lt;/strong&gt;&lt;/td&gt;';
			echo '&lt;td style="padding: 10px; border: 1px solid #eee;"&gt;' . esc_html( $value ) . '&lt;/td&gt;';
			echo '&lt;td style="padding: 10px; border: 1px solid #eee; text-align: center;"&gt;' . absint( $count ) . '&lt;/td&gt;';
			echo '&lt;/tr&gt;';
		}
	}

	echo '&lt;/tbody&gt;&lt;/table&gt;';
} else {
	echo '&lt;p&gt;No add-on data found for these orders.&lt;/p&gt;';
}

 

 

Articles

Hai bisogno di supporto?

Non trovi la risposta di cui hai bisogno? Il nostro team è qui per aiutarti, Contattami!