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

Exibir dados capturados com o plugin WooCommerce Product Add-ons nos bilhetes dos participantes #

Pode adicionar o seguinte fragmento de código ao seu código do tema do bilhete para exibir as seleções feitas por todos os participantes do pedido. Observe que esse trecho de código exibirá todos os dados capturados pelos complementos do produto WooCommerce para esse pedido como um todo, ele não atribuirá seleções a participantes específicos, pois essas informações não são armazenadas em postagens de tickets individuais. Este trecho de código funcionará melhor se for colocado no arquivo header.php do tema do bilhete, e se você configurá-lo para que o comprador receba todos os bilhetes dos participantes.

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

$report_data = [];

foreach ( $order-&gt;get_items() as $item ) {
	// Obter todos os metadados do item
	$meta_data = $item-&gt;get_meta_data();
													
	foreach ( $meta_data as $meta ) {
		// Nós só queremos contar meta que vem de Add-ons de Produto.
		// A maioria dos complementos não começa com um sublinhado.
		if ( strpos( $meta-&gt;key, '_' ) === 0 ) continue;

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

		// 1. verificar se é um carimbo de data/hora numérico de 10 dígitos
		if ( is_numeric( $value ) &amp;&amp; strlen( $value ) === 10 ) {
			$value = date_i18n( get_option( 'date_format' ), (int) $value );
		}
		// 2. caso contrário, verificar se se trata de uma cadeia AAAA-MM-DD
		elseif ( preg_match( '/^\d{4}-\d{2}-\d{2}$/', $value ) &amp;&amp; strtotime( $value ) {
			$value = date_i18n( get_option( 'date_format' ), strtotime( $value ) );
		}

		// Armazenar numa matriz aninhada: [Label][Value] = Contagem total
		if ( !isset( $report_data[$label][$value] ) {
			$report_data[$label][$value] = 0;
		}
		$report_data[$label][$value] += $qty;
	}
}

se ( ! vazio( $report_data ) ) {
	echo '<table align="center" style="width:80%; border-collapse: collapse; margin-top: 20px; font-family: sans-serif;">';
	ecoar '<thead style="background-color: #f1f1f1;">';
	ecoar '<tr>';
	ecoar '<th style="padding: 12px; border: 1px solid #ccc;">Grupo complementar</th>';
	ecoar '<th style="padding: 12px; border: 1px solid #ccc;">Seleção / Valor</th>';
	ecoar '<th style="padding: 12px; border: 1px solid #ccc; text-align: center;">Contagem total</th>';
	ecoar '</tr>';
	ecoar '</thead>';
	ecoar '<tbody>';

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

	echo '</tbody></table>';
} else {
	echo '<p>Não foram encontrados dados complementares para estas encomendas.</p>';
}

 

 

Artigos

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

Como é que podemos ajudar?