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".

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

Note that the above code snippet won’t work with COD / BACS / Cheque orders when order total is > 0. Check the free plugin on 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->get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			echo '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			echo '<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->get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			echo '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			echo '<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->get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Nome próprio</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />';
			echo '<strong>Apelido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />';
			echo '<strong>Endereço de correio eletrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />';
			echo '<strong>Aniversário</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq'].<br />';
			echo '<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='';
	if(!empty($attributes['product_id'])) {
	$product_id = $attributes['product_id'];
	}

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

	$the_query = new WP_Query( $args );

	if( $the_query->have_posts() ):
	while ( $the_query->have_posts() ) : $the_query->the_post();
	$postid = $the_query->post->ID;
	 
		// output all findings - 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");

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

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

function fooevents_display_date_on_single() {
	global $post;
	$product = wc_get_product( $post->ID );
	$start_date = $product->get_meta( 'WooCommerceEventsDate' );
	$end_date = $product->get_meta( 'WooCommerceEventsEndDate' );
	if ( $end_date ) {
	printf(
		'<h3>%s</h3>',
		esc_html( $start_date . ' - ' . $end_date )
	);
	} else if( $start_date ) {
	printf(
		'<h3>%s</h3>',
		esc_html( $start_date )
	);
	}
}
add_action( 'woocommerce_single_product_summary', 'fooevents_display_date_on_single' );

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 {
	display: none;
}
	
@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 file to display the Calendar with only the current event product when used on Product Descriptions/pages.

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

After adding the code snippet, you can use the shortcode like this:

[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 );
function fooevents_modify_add_to_cart_button_url( $button, $product ) {
	if (is_product_category() || is_shop()) {
		$button_text = $product->add_to_cart_text();
		$button_link = $product->get_permalink();
		$button = '<a class="button" href="/pt/' . $button_link . '/">' . $button_text . '</a>';
		return $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 selectors on the product page. It should work with Seating events if you only display the Seating Chart on the Checkout page. This code snippet can be used for Bookable events.

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

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

	// Cool, lets do our own template!
	?>
	<table class="variations variations-grid" cellspacing="0">
		<tbody>
			<?php
			foreach ( $variations as $key => $value ) {
				if ( ! $value['variation_is_visible'] ) {
					continue;
				}
				?>
			<tr>
				<td>
					<?php
					foreach ( $value['attributes'] as $key => $val ) {
						$val = str_replace( array( '-', '_' ), ' ', $val );
						printf( '<span class="attr attr-%s">%s</span>', $key, ucwords( $val ) );
					}
					?>
				</td>
				<td>
					<?php echo $value['price_html']; ?>
				</td>
				<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'>
						<?php woocommerce_quantity_input(); ?>
						<?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>
						<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 { ?>
						<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->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;
	}
	array( / php )

	< h2 > Add support for daily start and end times to your ticket themes < / h2 >
	as of version < strong > 1.5.5 < / strong > of the < a href = 'https://www.fooevents.com/products/fooevents-multi-day/' > FooEvents Multi - day < / a > plugin, you can select different start and end times for each day of a < strong > multi - day event < / strong > . Support for this feature has also been added to all < a href = 'https://www.fooevents.com/products/ticket-themes/' > FooEvents Ticket Themes < / a > . Please < a href = 'https://help.fooevents.com/docs/topics/tickets/ticket-themes/#updating-ticket-themes' > follow these instructions < / a > to update an existing ticket theme . if you are using a customized ticket theme and are not able to replace the ticket theme with the updated version, please add the following code snippet to your ticket theme in order to add support for start and end times .

	array( php )
	< ! --MULTI - DAY DETAILS-- >

	< ? php if ( $ticket['WooCommerceEventsTicketDisplayMultiDay'] == 'on' ) {
		: ;
	}
	?>
	<?php $x = 1; ?>
	<?php $y = 0; ?>    
	<?php foreach ( $ticket['WooCommerceEventsSelectDate'] as $date ) : ?>
			<strong><?php printf( __( '%1$s %2$d: ', 'woocommerce-events' ), $ticket['dayTerm'], $x ); ?></strong>
			<?php echo esc_attr( $date ); ?><br /> 
			<?php if ( ! empty( $ticket['WooCommerceEventsSelectDateHour'][ $y ] ) && ! empty( $ticket['WooCommerceEventsSelectDateMinutes'][ $y ] ) ) : ?>
				<?php echo $ticket['WooCommerceEventsSelectDateHour'][ $y ] . ':' . $ticket['WooCommerceEventsSelectDateMinutes'][ $y ]; ?><?php echo( isset( $ticket['WooCommerceEventsSelectDatePeriod'][ $y ] ) ) ? ' ' . $ticket['WooCommerceEventsSelectDatePeriod'][ $y ] : ''; ?>
			<?php endif; ?>
			<?php if ( ! empty( $ticket['WooCommerceEventsSelectDateHourEnd'][ $y ] ) && ! empty( $ticket['WooCommerceEventsSelectDateMinutesEnd'][ $y ] ) ) : ?>
				<?php echo ' - ' . $ticket['WooCommerceEventsSelectDateHourEnd'][ $y ] . ':' . $ticket['WooCommerceEventsSelectDateMinutesEnd'][ $y ]; ?><?php echo( isset( $ticket['WooCommerceEventsSelectDatePeriodEnd'][ $y ] ) ) ? ' ' . $ticket['WooCommerceEventsSelectDatePeriodEnd'][ $y ] : ''; ?>
			<?php endif; ?>	
		<br />										
		<?php ++$x; ?>
		<?php ++$y; ?>
	<?php endforeach; ?>
<?php endif; ?>

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 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->is_type( 'variable' ) ) {
		return $button;
	}
	// Button text here
	$button_text = __( 'Book Ticket', '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 , , , , , , , , , , , , , , , , , , ,