Tópicos

⌘K
  1. Tópicos
  2. Trechos de código

Trechos de código

Este é um Nível de programador documento. Se não estiver familiarizado com o código/modelos e com a resolução de potenciais conflitos, contacte um programador que esteja familiarizado com o FooEvents e/ou o WooCommerce.

Importante, por favor leia primeiro #

Estes snippets são fornecidos como cortesia e não fazem parte da oferta de produtos do FooEvents. Eles são considerados customizações e não são oficialmente suportados pelo FooEvents. Como tal, não fornecemos suporte para snippets e personalizações de acordo com nosso Termos do serviço. Utilizar por sua conta e risco.

Concluir automaticamente as encomendas #

Isto permite que os bilhetes sejam enviados automaticamente após a receção do pagamento, em vez de ter de completar manualmente a encomenda. Certifique-se de que os produtos do seu evento estão definidos para "Virtual" e "Descarregável", tal como explicado no nosso documentação de ajuda, caso contrário, a ordem não completar automaticamente, mesmo que o pagamento tenha sido efectuado.

Adicione o seguinte código ao tema filho do seu functions.php ou através de um plugin que permita a adição de funções personalizadas, como o Trechos de código plugin. Evite adicionar código personalizado diretamente ao functions.php pois este será substituído quando atualizar o tema.

Também pode alterar o estado "Concluído" para outro estado da encomenda, como "Em processamento".

/**
 * Completar programaticamente as encomendas WooCommerce pagas
 * @how-to businessbloomer.com/woocommerce-customization
 * @author Rodolfo Melogli, Business Bloomer
 * @testedwith WooCommerce 9
 * @community https://businessbloomer.com/club/
 */
 
add_filter( 'woocommerce_payment_complete_order_status', 'bbloomer_autocomplete_processing_orders', 9999 );
 
function bbloomer_autocomplete_processing_orders() {
	return 'completed';
}

Note que o trecho de código acima não funciona com encomendas COD / BACS / Cheque quando o total da encomenda é > 0. Verifique o plugin gratuito em esta página para resolver o problema.

Mostrar o nome e o e-mail do participante no e-mail de administração da Nova Ordem #

Adicione o seguinte trecho de código ao functions.php ficheiro. Pode alterar o correio eletrónico em que este é apresentado, utilizando um ficheiro gancho.

.

[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>Detalhes do participante</h3>";
	$WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			ecoar '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			ecoar '<strong>Endereço de correio eletrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
			echo "</p>";
		}
	}
}

Mostrar todos os campos personalizados de participantes sem etiquetas no e-mail de administração da Nova Encomenda #

Adicione o seguinte trecho de código ao functions.php ficheiro. Pode alterar o correio eletrónico em que este é apresentado, utilizando um ficheiro gancho.

.

[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>Detalhes do participante</h3>";
	$WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			ecoar '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			ecoar '<strong>Endereço de correio eletrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
			foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) {
				echo $caf.'<br />';
			}
			echo "</p>";
		}
	}
}

Mostrar campos de participantes personalizados com etiquetas no e-mail de administração da Nova Encomenda #

Adicione o seguinte trecho de código ao functions.php ficheiro. Pode alterar o correio eletrónico em que este é apresentado, utilizando um ficheiro gancho. Certifique-se de substituir "ovsxtmynwagotamjqieq" e "ruzwhgbuhzuzzdwnnaxe" no código de exemplo pelo seu código de campo de participante personalizado específico. Pode encontrar esta informação se editar um bilhete e procurar cada campo de participante personalizado na secção "Campos personalizados". É necessário adicionar cada campo de participante personalizado e sua etiqueta 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>Detalhes do participante</h3>";
	$WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			ecoar '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			ecoar '<strong>Endereço de correio eletrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
			ecoar '<strong>Aniversário</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq'].<br />';
			ecoar '<strong>Canção favorita</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe'].<br />';
			echo "</p>";
		}
	}
}

Mostrar a hora de início do evento na listagem de eventos #

Adicione o seguinte trecho de código ao functions.php ficheiro. Estilize a apresentação da hora adicionando CSS para a classe 'fooevents-date'.

Alterar o posicionamento da hora utilizando um gancho.

.

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

Apresentar os participantes registados em formato de tabela #

Adicione o seguinte trecho de código ao functions.php para apresentar todos os participantes registados no seu evento num formato de grelha de tabela. Depois de adicionar o fragmento de código, pode utilizar o shortcode da seguinte forma:

[fooevents_attendees]

para mostrar todos os participantes de todos os eventos, ou assim:

[fooevents_attendees product_id=123]

em que "123" é o ID do evento para o qual se pretende apresentar a lista de participantes.

function fooevents_display_attendees($attributes) {
 
	$product_id='';
	se(!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() ) : $o_query-&gt;a_postagem();
	$postid = $o_query-&gt;post-&gt;ID;
	 
		// mostrar todos os resultados - PERSONALIZE AO SEU GOSTO
		$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");

Apresentar a data do evento antes do título na página do produto #

Alterar a colocação da data utilizando um gancho.

função 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' );
	se ( $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' );

Se pretender disponibilizar a data do evento como um shortcode, pode adicionar a seguinte linha abaixo da função:

add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');

Em seguida, pode utilizar o código curto [fooevents_date_on_single] para apresentar a data do evento na página.

Substituir o ícone do lugar no mapa de lugares por uma imagem diferente #

Modifique o seguinte fragmento de código CSS, adicionando o URL a uma imagem diferente que pretenda substituir a imagem predefinida do lugar para todos os lugares. Adicione o trecho de código modificado ao ficheiro CSS personalizado do seu tema.

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

Remover o ícone do lugar no mapa de lugares para que os lugares sejam apresentados como caixas #

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

Alterar a direção dos números dos lugares no mapa de lugares #

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

Mostrar os lugares ímpares à direita e os lugares pares à esquerda #

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

Mostrar lugares no meio do mapa de lugares #

#fooevents_seating_dialog .fooevents_seating_chart_view_row_name,
#fooevents_seating_dialog .fooevents_seating_chart_view_row {
	text-align: center;
}

Permitir que o mapa de lugares se desloque horizontalmente em vez de apresentar os lugares na fila seguinte #

Isto pode ser útil se tiver muitos lugares por fila e quiser que sejam apresentados um ao lado do outro em vez de na fila seguinte, se não couberem numa linha.

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

Mostrar uma grelha de calendário em computadores de secretária e uma lista de semanas de calendário em dispositivos móveis #

Adicione dois códigos de acesso ao calendário na página ou publicação onde pretende apresentar o calendário. O primeiro código curto apresentará uma grelha de calendário e deverá ter o seguinte aspeto:

[fooevents_calendar id="desktop"]

O segundo shortcode apresentará uma lista de semanas do calendário e deverá ter o seguinte aspeto

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

Adicione o seguinte trecho de código CSS ao ficheiro CSS personalizado do seu tema. Certifique-se de que o valor do seletor de ID CSS é o mesmo que o valor do atributo "id" que especificou no código curto. Pode ajustar a propriedade "max-width" ao tamanho do ecrã em que pretende que a lista de semanas do calendário seja apresentada e que a grelha do calendário fique oculta.

#desktop_fooevents_calendar {
	display: block;
}
	
#mobile_fooevents_calendar {
	ecrã: nenhum;
}
	
@media screen and (max-width: 600px) {
	#desktop_fooevents_calendar {
	display: none;
	}
	
	#mobile_fooevents_calendar {
	display: block;
	}    
}

Calendário dinâmico #

Adicione o seguinte trecho de código ao functions.php para apresentar o Calendário apenas com o produto do evento atual quando utilizado nas páginas/descrições de produtos.

função dynamic_fooevents_calendar_shortcode() {
	se (is_product()) {
		global $product;
		se ($product) {
			$product_id = $product->get_id();
			return do_shortcode('[fooevents_calendar post="' . $product_id . '"]');
		}
	}
	return ''; // fallback se não estiver na página do produto
}

add_shortcode('dynamic_fooevents_calendar', 'dynamic_fooevents_calendar_shortcode');

Depois de adicionar o snippet de código, pode utilizar o shortcode da seguinte forma:

[Calendário dinâmico de eventos alimentares]

Alterar a posição do ícone Copiar detalhes do comprador #

O seguinte excerto alinhará o botão de cópia à direita da etiqueta do primeiro nome:

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

Se não estiver a utilizar etiquetas, mas sim marcadores de posição de entrada, utilize o seguinte fragmento de código:

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

Mostrar o separador "Detalhes do evento" primeiro na página do evento #

Adicione o seguinte trecho de código ao functions.php ficheiro.

add_filter( 'woocommerce_product_tabs', 'reorder_tabs', 98 );
função reorder_tabs( $tabs ) {

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

}

Direcionar todos os botões "Adicionar ao carrinho" para páginas de produtos #

Se um produto for um produto simples, por defeito, o botão "Adicionar ao carrinho" adicionará automaticamente um produto ao carrinho do cliente. Quando utiliza a extensão FooEvents Bookings, pode exigir que os seus clientes vão primeiro à página do produto para selecionar a data e a faixa horária da reserva. O seguinte snippet garante que quando o botão "Adicionar ao carrinho" é clicado para produtos simples, o utilizador é direcionado para a página do produto.

add_filter( 'woocommerce_loop_add_to_cart_link', 'fooevents_modify_add_to_cart_button_url', 10, 2 );
função fooevents_modify_add_to_cart_button_url( $button, $product ) {
	se (is_product_category() || is_shop()) {
		$button_text = $product-&gt;add_to_cart_text();
		$button_link = $product-&gt;get_permalink();
		$button = '<a class="button" href="/pt/' . $button_link . '/">' . $button_text . '</a>';
		devolver $button;
	}
}

Mostrar LIVRE se o preço do evento for definido como zero (0) #

Adicione o seguinte trecho de código ao functions.php se pretender alterar eventos e produtos com um preço de "0" para "GRÁTIS". Também pode substituir a palavra "GRÁTIS" por outra palavra ou frase ou deixá-la em branco se não quiser que nada seja apresentado.

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

Apresentar produtos e variações (bilhetes) num formato de grelha de tabela #

Adicione o seguinte trecho de código ao functions.php para apresentar produtos e variações num formato de grelha de tabela na página do evento/produto, em vez da lista pendente predefinida. Cada opção de bilhete será listada numa nova linha e terá o seu próprio seletor de quantidade.

Atenção: Este trecho de código pode ser incompatível com o FooEvents Assentos e FooEvents Reservas na página do produto. Deverá funcionar com eventos de lugares se apenas apresentar o mapa de lugares na página de checkout. Este trecho de código pode ser utilizado para eventos reserváveis.

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

	$variations = find_valid_variations();

	// Verificar se a meta especial 'price_grid' está definida; se estiver, carregar o modelo predefinido:
	if ( get_post_meta($post-&gt;ID, 'price_grid', true) ) {
		// Enfileirar scripts de variação
		wp_enqueue_script( 'wc-add-to-cart-variation' );

		// Carregar o modelo
		wc_get_template( 'single-product/add-to-cart/variable.php', array(
				'available_variations' =&gt; $product-&gt;get_available_variations(),
				'attributes' =&gt; $product-&gt;get_variation_attributes(),
				'selected_attributes' =&gt; $product-&gt;get_variation_default_attributes()
			) );
		return;
	}

	// Fixe, vamos fazer o nosso próprio template!
	?&gt;
	<table class="variations variations-grid" cellspacing="0">
		<tbody>
			$value ) { if ( ! $value['variation_is_visible'] ) { continue; } ?&gt;
			<tr>
				<td>
					$val ) { $val = str_replace( array( '-', '_' ), ' ', $val );
						printf( '<span class="attr attr-%s">%s</span>', $key, ucwords( $val ) ); } ?&gt;
				</td>
				<td>
					<?php echo $value['price_html']; ?>
				</td>
				<td>
					<?php if ( $value['is_in_stock'] ) { ?>
					<form class="cart" action="/pt//?php%20echo%20esc_url(%20$product-add_to_cart_url()%20);%20?" method="post" enctype='multipart/form-data' data-trp-original-action="<?php echo esc_url( $product->add_to_cart_url() ); ?>">
						$attr_value ) { ?&gt;
							<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> Adicionar ao carrinho</button>
						<input type="hidden" name="variation_id" value="<?php echo $value['variation_id']; ?>" />
						<input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" />
						<input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $post->ID ); ?>" />
					<input type="hidden" name="trp-form-language" value="pt"/></form>
					<?php } else { ?>
						<p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
					<?php } ?>
				</td>
			</tr>
			<?php } ?>
		</tbody>
	</table>
	<?php
	}

	function find_valid_variations() {
		global $product;

		$variations   = $product->get_available_variations();
		$attributes = $product-&gt;get_attributes();
		$new_variants = array();

		// Percorrer todas as variantes
		foreach ( $variations as $variation ) {

			// Examinar os atributos.

			// 1. se ambos estiverem explicitamente definidos, esta é uma variação válida
			// 2. se um não estiver definido, significa que não há nenhum, e temos de 'criar' o resto.

			$valid = true; // até agora
			foreach ( $attributes as $slug =&gt; $args ) {
				if ( array_key_exists( "attribute_$slug", $variation['attributes'] ) &amp;&amp; ! empty( $variation['attributes'][ "attribute_$slug" ] ) ) {
					// Existe

				} else {
					// Não existe, criar
					$valid = false; // contém 'anys'
					// percorrer todas as opções para o atributo 'ANY' e adicionar cada uma
					foreach ( explode( '|', $attributes[ $slug ]['value'] ) as $attribute ) {
						$attribute = trim( $attribute );
						$new_variant = $variation;
						$new_variant['attributes'][ "attribute_$slug" ] = $attribute;
						$new_variants[] = $new_variant;
					}
				}
			}

			// Isto contém TODOS os atributos do conjunto e é, por si só, uma variação 'válida'.
			se ( $valid ) {

				$new_variants[] = $variation;
			}
		}

		return $new_variants;
	}
	

Os botões padrão WooCommerce Adicionar ao Carrinho exibidos nas páginas de listagem da loja adicionam automaticamente um produto ao carrinho e redireccionam para a página do carrinho. Ao utilizar as Reservas FooEvents, pode preferir encaminhar o utilizador através da página do produto, para que este possa primeiro fazer uma seleção de faixa horária e de hora de reserva antes de prosseguir para a página do carrinho. O snippet a seguir substituirá o link adicionar ao carrinho por um link para a página do produto. Desta forma, o utilizador poderá fazer a seleção de reserva adequada na página do produto antes de avançar para a página do carrinho ou de finalização da compra.

/**
* @snippet Alterar o botão ‘Adicionar ao carrinho’ do WooCommerce para 'Ver produto'
* @source https://www.wptechnic.com/?p=4615
* @author Muhammad Tamzid
* @compatible WC 4.3.1
*/
// Alterar o botão 'Adicionar ao carrinho' do WooCommerce para 'Ver produto'
add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 );
function wpt_custom_view_product_button( $button, $product ) {
	// Ignorar para produtos variáveis
	if ( $product-&gt;is_type( 'variable' ) ) {
		return $button;
	}
	// Texto do botão aqui
	$button_text = __( 'Reservar bilhete', 'woocommerce' );
	return '<a class="button wpt-custom-view-product-button" href="/pt/' . $product->get_permalink() . '/">' . $button_text . '</a>';
}

Exibir a data do evento para eventos "Únicos" no Carrinho e na página de 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'];

	se ( $value = $product->get_meta( 'WooCommerceEventsDate' ) {
		$product_name .= '' . $value . '';
	}
	return $product_name;
}

 

 

Artigos

Etiquetas , , , , , , , , , , , , , , , , , , ,