Fragmenty kodu

To jest Poziom deweloperski dokument. Jeśli nie jesteś zaznajomiony z kodem/szablonami i rozwiązywaniem potencjalnych konfliktów, skontaktuj się z programistą zaznajomionym z FooEvents i/lub WooCommerce.

Ważne, przeczytaj najpierw

Te fragmenty są dostarczane jako uprzejmość i nie stanowią części oferty produktów FooEvents. Są one uważane za dostosowania i nie są oficjalnie obsługiwane przez FooEvents. W związku z tym nie zapewniamy wsparcia dla snippetów i dostosowań zgodnie z naszym Warunki świadczenia usług. Używaj na własne ryzyko.

Automatycznie kompletuj zamówienia

Dzięki temu bilety będą automatycznie wysyłane po otrzymaniu płatności, zamiast konieczności ręcznego uzupełniania zamówienia. Upewnij się, że produkty wydarzenia są ustawione na "Wirtualny" i "Do pobrania", jak wyjaśniono w naszym dokumentacja pomocy, otherwise, the order will not complete automatically even if payment was made.

Dodaj następujący kod do motywu podrzędnego functions.php lub za pośrednictwem wtyczki, która umożliwia dodawanie niestandardowych funkcji, takich jak Fragmenty kodu wtyczka. Unikaj dodawania niestandardowego kodu bezpośrednio do motywu nadrzędnego functions.php ponieważ zostanie on nadpisany podczas aktualizacji motywu.

Można również zmienić status "Completed" na inny status zamówienia, taki jak "Processing".

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

Należy pamiętać, że powyższy fragment kodu nie będzie działał w przypadku zamówień COD / BACS / czekowych, gdy suma zamówienia wynosi> 0. Sprawdź bezpłatną wtyczkę na stronie ta strona aby to rozwiązać.

Pokaż imię i nazwisko oraz adres e-mail uczestnika w wiadomości e-mail administratora nowego zamówienia.

Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak.

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>Szczegóły dotyczące uczestników</h3>";
	$WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true);
	foreach($WooCommerceEventsOrderTickets as $event) {
		foreach($event as $ticket) {
			echo "<p>";
			echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />';
			echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />';
			echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />';
			echo "</p>";
		}
	}
}

Wyświetlanie wszystkich niestandardowych pól uczestników bez etykiet w wiadomości e-mail administratora nowego zamówienia.

Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak.

.

[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>Szczegóły dotyczące uczestników</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach($event as $ticket) {
            echo "<p>";
            echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />';
            echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />';
            echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />';
            foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) {
                 echo $caf.'<br />';
            }
            echo "</p>";
        }
    }
}

Wyświetlanie niestandardowych pól uczestników z etykietami w wiadomości e-mail administratora nowego zamówienia

Dodaj następujący fragment kodu do motywu functions.php plik. Możesz zmienić wiadomość e-mail, w której jest ona wyświetlana, używając innej hak. Upewnij się, że zastąpiłeś "ovsxtmynwagotamjqieq" i "ruzwhgbuhzuzzdwnnaxe" w przykładowym kodzie swoim własnym niestandardowym kodem pola uczestnika. Informacje te można znaleźć, edytując bilet i szukając każdego niestandardowego pola uczestnika w sekcji "Pola niestandardowe". Będziesz musiał dodać każde niestandardowe pole uczestnika i jego etykietę indywidualnie.

.

[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>Szczegóły dotyczące uczestników</h3>";
    $WooCommerceEventsOrderTickets = get_post_meta($order-&gt;get_id(), 'WooCommerceEventsOrderTickets', true);
    foreach($WooCommerceEventsOrderTickets as $event) {
        foreach($event as $ticket) {
            echo "<p>";
            echo '<strong>Imię</strong>: '.$ticket['WooCommerceEventsAttendeeName']'.<br />';
            echo '<strong>Nazwisko</strong>: '.$ticket['WooCommerceEventsAttendeeLastName']'.<br />';
            echo '<strong>Adres e-mail</strong>: '.$ticket['WooCommerceEventsAttendeeEmail']'.<br />';
            echo '<strong>Urodziny</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq']'.<br />';
            echo '<strong>Ulubiona piosenka</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe']'.<br />';
            echo "</p>";
        }
    }
}

Wyświetlanie godziny rozpoczęcia wydarzenia na liście wydarzeń

Dodaj następujący fragment kodu do motywu functions.php plik. Nadaj styl wyświetlaniu godziny, dodając CSS dla klasy "fooevents-date".

Zmień umiejscowienie czasu, używając innego hak.

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

Wyświetlanie zarejestrowanych uczestników w formie tabeli

Dodaj następujący fragment kodu do motywu functions.php aby wyświetlić wszystkich zarejestrowanych uczestników wydarzenia w formacie siatki tabeli. Po dodaniu fragmentu kodu możesz użyć shortcode w następujący sposób:

[fooevents_attendees]

aby wyświetlić wszystkich uczestników dla wszystkich wydarzeń, lub w ten sposób:

[fooevents_attendees product_id=123]

gdzie "123" to identyfikator wydarzenia, dla którego chcesz wyświetlić listę uczestników.

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 .= "<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");

Wyświetlanie daty wydarzenia przed tytułem na stronie produktu

Zmień umiejscowienie daty, używając innego hak.

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(
		'<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' );

Jeśli chcesz, aby data wydarzenia była dostępna jako shortcode, możesz dodać następującą linię poniżej funkcji:

add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');

Następnie można użyć shortcode [fooevents_date_on_single] aby wyświetlić datę wydarzenia na stronie.

Zastąpienie ikony miejsca na planie miejsc innym obrazem

Zmodyfikuj poniższy fragment kodu CSS, dodając adres URL do innego obrazu, którym chcesz zastąpić domyślny obraz siedzenia dla wszystkich miejsc. Dodaj zmodyfikowany fragment kodu do niestandardowego pliku CSS motywu.

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

Usuń ikonę miejsca na planie miejsc, aby miejsca były wyświetlane jako boksy.

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

Zmiana kierunku numerów miejsc na planie miejsc

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

Pokaż miejsca nieparzyste po prawej stronie, a parzyste po lewej.

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

Wyświetlanie miejsc na środku tabeli miejsc

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

Plan miejsc powinien przewijać się poziomo zamiast wyświetlać miejsca w następnym rzędzie.

Może to być przydatne, jeśli masz wiele miejsc w rzędzie i chcesz, aby były one wyświetlane obok siebie zamiast w następnym rzędzie, jeśli nie mieszczą się w jednym wierszu.

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

Wyświetlanie siatki kalendarza na komputerach stacjonarnych i listy tygodni kalendarza na urządzeniach mobilnych.

Dodaj dwa skróty kalendarza na stronie lub w poście, w którym chcesz wyświetlić swój kalendarz. Pierwszy shortcode wyświetli siatkę kalendarza i powinien wyglądać następująco:

[fooevents_calendar id="desktop"]

Drugi shortcode wyświetli listę tygodni kalendarza i powinien wyglądać następująco:

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

Dodaj następujący fragment kodu CSS do niestandardowego pliku CSS motywu. Upewnij się, że wartość selektora CSS ID jest taka sama jak wartość atrybutu "id" określonego w kodzie skróconym. Możesz dostosować właściwość "max-width" do rozmiaru ekranu, na którym ma być wyświetlana lista tygodni kalendarza, a siatka kalendarza ma być ukryta.

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

Dynamiczny kalendarz

Dodaj następujący fragment kodu do motywu functions.php aby wyświetlić kalendarz tylko z aktualnym produktem wydarzenia, gdy jest używany na stronach z opisami produktów.

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');

Po dodaniu fragmentu kodu można użyć shortcode w następujący sposób:

[dynamic_fooevents_calendar]

Zmiana położenia ikony Kopiuj szczegóły kupującego

Poniższy fragment kodu spowoduje wyrównanie przycisku kopiowania do prawej strony etykiety imienia:

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

Jeśli nie używasz etykiet, a raczej symboli zastępczych, użyj poniższego fragmentu kodu:

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

Pokaż zakładkę "Szczegóły wydarzenia" jako pierwszą na stronie wydarzenia.

Dodaj następujący fragment kodu do motywu functions.php plik.

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

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

}

Przekieruj wszystkie przyciski "Dodaj do koszyka" na strony produktów.

Jeśli produkt jest produktem prostym, domyślnie przycisk "Dodaj do koszyka" automatycznie doda produkt do koszyka klienta. W przypadku korzystania z rozszerzenia FooEvents Bookings może być wymagane, aby klienci najpierw przeszli do strony produktu, aby wybrać datę i miejsce rezerwacji. Poniższy fragment kodu zapewni, że po kliknięciu przycisku "Dodaj do koszyka" dla prostych produktów, użytkownik zostanie przekierowany na stronę produktu.

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="/pl/' . $button_link . '/">' . $button_text . '</a>';
		return $button;
	}
}

Wyświetla FREE, jeśli cena wydarzenia jest ustawiona na zero (0).

Dodaj następujący fragment kodu do motywu functions.php jeśli chcesz zmienić wydarzenia i produkty z ceną "0" na "FREE". Możesz również zastąpić słowo "FREE" innym słowem lub frazą lub pozostawić je puste, jeśli nie chcesz, aby cokolwiek było wyświetlane.

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

Domyślne przyciski WooCommerce Dodaj do koszyka wyświetlane na stronach z listą sklepów automatycznie dodają produkt do koszyka i przekierowują na stronę koszyka. W przypadku korzystania z rezerwacji FooEvents preferowane może być przekierowanie użytkownika przez stronę produktu, aby mógł najpierw dokonać wyboru miejsca i czasu rezerwacji przed przejściem do strony koszyka. Poniższy fragment kodu zastąpi link dodawania do koszyka linkiem do strony produktu. Dzięki temu użytkownik będzie mógł dokonać odpowiedniego wyboru rezerwacji na stronie produktu przed przejściem do koszyka lub strony kasy.

/**
* @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="/pl/' . $product->get_permalink() . '/">' . $button_text . '</a>';
}

Wyświetlanie daty wydarzenia dla "pojedynczych" wydarzeń w koszyku i na stronie kasy.

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

Wyświetlanie danych przechwyconych za pomocą wtyczki WooCommerce Product Add-ons w biletach uczestników.

Możesz dodać następujący fragment kodu w swoim pliku kod motywu biletu to display the selections made by all the attendees in the order. Please note that this code snippet will display all the data captured by the WooCommerce Product Add-ons for that order as a whole, it won’t allocate selections to specific attendees since this information is not stored on individual Ticket posts. This code snippet will work best if placed in the ticket theme’s header.php file, and if you’ve set it up so that the purchaser gets all attendee tickets.

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

$report_data = [];

foreach ( $order->get_items() as $item ) {
	// Get all meta data for the item
	$meta_data = $item->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->key, '_' ) === 0 ) continue;

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

		// 1. Check if it's a 10-digit numeric timestamp
		if ( is_numeric( $value ) && 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 ) && 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 '<table align="center" style="width:80%; border-collapse: collapse; margin-top: 20px; font-family: sans-serif;">';
	echo '<thead style="background-color: #f1f1f1;">';
	echo '<tr>';
	echo '<th style="padding: 12px; border: 1px solid #ccc;">Grupa dodatków</th>';
	echo '<th style="padding: 12px; border: 1px solid #ccc;">Wybór / wartość</th>';
	echo '<th style="padding: 12px; border: 1px solid #ccc; text-align: center;">Łączna liczba</th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';

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

	echo '</tbody></table>';
} else {
	echo '<p>Nie znaleziono dodatkowych danych dla tych zamówień.</p>';
}

Wyświetlanie produktów i wariantów (biletów) w formacie siatki tabeli

Dodaj następujący fragment kodu do motywu functions.php aby wyświetlać produkty i warianty w formacie siatki tabeli na stronie wydarzenia/produktu zamiast domyślnej listy rozwijanej. Każda opcja biletu zostanie wyświetlona w nowym wierszu i będzie miała własny selektor ilości.

Please note: This code snippet might be incompatible with the FooEvents Siedzenie i FooEvents Rezerwacjena stronie produktu. Powinno to działać w przypadku wydarzeń z miejscami siedzącymi, jeśli karta miejsc siedzących jest wyświetlana tylko na stronie kasy. Ten fragment kodu może być używana dla wydarzeń z możliwością rezerwacji.

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-&gt;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" =&gt; $product-&gt;get_available_variations(), "attributes" =&gt; $product-&gt;get_variation_attributes(), "selected_attributes" =&gt; $product-&gt;get_variation_default_attributes()) );
	return;
}
// Cool, lets do our own template!
?&gt;
<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>
	.
</td>
<td>
	.
<form class='cart' action='/pl//?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() ); ?>">
		<?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> Dodaj do koszyka</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="pl"/></form>
	<?php } else { ?>
<p class='stock out-of-stock'>.</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;
}

?>

 

 

Articles

Potrzebujesz pomocy?

Nie możesz znaleźć potrzebnej odpowiedzi? Nasz zespół jest tutaj, aby Ci pomóc, skontaktuj się!