Shortcode – Tilføj/fjern abonnementsmeddelelse til kurven

Denne shortcode kan bruges til at vise en bestemt besked rundt omkring på siden baseret på en varekategori i kurven, den er god at bruge hvis man har abonnement produkter i kurven og gerne vil give en besked så snart en af dem tilføjes til kurven.

For at ændre hvad der står i shortcoden skal du lige tjekke koden igennem så står det på 3 linje.

For at få koden til at virke til din varekategori skal du ændre de steder der står “online-kursus”, her indsætter du din varekategori som webshoppen skal tjekke op med – brug korttitlen af varekategorien.

Indsæt i pluginnet "Snippets"

add_shortcode( 'subscription_notice', function ( $atts, $content = '' ) {

	$default_message = __( '<strong>Onlinekurser:</strong> <br> Du er ved at købe et online kursus, du vil efter betalingen kunne se dit online kursus på din profil.' );

	// Stop hurtigt, hvis kurven er tom
	if ( ! WC()->cart || ! WC()->cart->get_cart_contents_count() ) {
		return '';
	}

	// Find mindst ét produkt i kategorien "online-kursus"
	foreach ( WC()->cart->get_cart() as $item ) {
		if ( isset( $item['data'] ) && has_term( 'online-kursus', 'product_cat', $item['data']->get_id() ) ) {
			ob_start(); ?>
			<div class="subscription-notice"><?php echo $content ?: $default_message; ?></div>
			<?php return ob_get_clean();
		}
	}

	return '';
} );

/**
 * Læg en skjult markør i mini-carten for hvert online-kursus,
 * så vi kan detektere det med jQuery bagefter.
 */
add_filter( 'woocommerce_cart_item_name', function ( $name, $cart_item ) {
	if ( has_term( 'online-kursus', 'product_cat', $cart_item['product_id'] ) ) {
		$name .= '<span class="cart-category-online-kursus" style="display:none;">online-kursus</span>';
	}
	return $name;
}, 10, 2 );

/**
 * Frontend-scriptet holder øje med mini-carten
 * og skjuler/viser noten på Elementor-widget-niveau.
 */
add_action( 'wp_enqueue_scripts', function () {
	wp_enqueue_script( 'wc-cart-fragments' );

	wp_add_inline_script(
		'wc-cart-fragments',
		/** @lang JavaScript */
		"
		jQuery(document).ready(function ($) {

			function checkCartForOnlineCourse() {
				return new Promise(function (resolve) {
					if (typeof wc_cart_fragments_params === 'undefined') {
						resolve(false);
						return;
					}

					const ajaxUrl = wc_cart_fragments_params.wc_ajax_url.replace('%%endpoint%%', 'get_refreshed_fragments');

					$.get(ajaxUrl, function (response) {
						const fragments  = response.fragments || {};
						const rawCart    = fragments['div.widget_shopping_cart_content'] || '';
						const hasCourse  = /cart-category-online-kursus/i.test(rawCart);
						resolve(hasCourse);
					});
				});
			}

			// Initialt check
			checkCartForOnlineCourse().then(toggleNotice);

			// Når mini-carten genopfriskes
			$(document.body).on('wc_fragments_refreshed', function () {
				checkCartForOnlineCourse().then(toggleNotice);
			});

			function toggleNotice(hasCourse) {
				const \$widget = $('.subscription-notice').closest('.elementor-widget');
				if (hasCourse) {
					\$widget.show();
				} else {
					\$widget.hide();
				}
			}
		});
		"
	);
} );