Haluaisitko järkeistää alennuksien hallintaa WooCommercessa? Sisäänrakennettuna itsessään WooCommercen tuotteiden hallinnassa ei ole tapa millä voi suodattaa näkyviin vain tuotteet mitkä ovat tarjouksessa. Tämä voisi kuitenkin tulla erityisen hyödylliseksi silloin kun tuotteita on satoja tai tuhansia.

Ajattelin että tätä voisi hieman järkeistää joten tässä alla pieni koodi snippetti mistä voisi olla hyötyjä. Kyseisellä snippetillä saat tuotehallintaan näkyviin suodattimen missä voit suodattaa tuotteet kolmella eri tavalla.

Näyttämään vain tarjoustuotteet

Mikä voi olla hyödyllinen isommissa listauksissa kun haluat tehdä muutoksia, joko alennuksiin tai aikatauluihin.

Näyttämään vain normaalihintaiset tuotteet

Mikä voi olla hyödyllistä kun olet tekemässä alennuksia monelle samanimiselle tuotteelle ja haluat mahdollisesti yhdistää normaalihintaiset tuotteet + sana suodatukset.

Näyttämään tulevat ajastetut alennukset jotka eivät ole tällä hetkellä aktiivisia

Mikä voi olla hyödyllistä ihan sillä tavoin, että voit varmistaa että onhan kaikki ensikuun alennukset ajastettu jo etukäteen toimintaan.

Tässä koodisnippet jolla saat kyseiset suodatukset

Mihin koodi kuuluu? Voit käyttää joko lapsiteeman Functions.php tiedostoa tai Code Snippets lisäosaa kyseisen snippetin lisäämiseen.

/**
 * @snippet       Lisätään "Tarjoustuotteet" -suodatin adminin tuotelistaukseen (sis. tulevat)
 * @author        Niko Vittaniemi - WPopas.fi
 * @testedwith    WooCommerce 10.0.3
 */

add_action('restrict_manage_posts', 'wpopas_admin_suodatin_tarjoustuotteet');
function wpopas_admin_suodatin_tarjoustuotteet() {
	if (get_current_screen()->post_type !== 'product') {
		return;
	}
	$valittu = isset($_GET['wpopas_tarjoussuodatin']) ? sanitize_text_field($_GET['wpopas_tarjoussuodatin']) : '';
	?>
	<select name="wpopas_tarjoussuodatin">
		<option value=""><?php _e('Näytä kaikki tuotteet', 'woocommerce'); ?></option>
		<option value="on_sale" <?php selected($valittu, 'on_sale'); ?>><?php _e('Tarjoustuotteet', 'woocommerce'); ?></option>
		<option value="not_on_sale" <?php selected($valittu, 'not_on_sale'); ?>><?php _e('Normaalihintaiset tuotteet', 'woocommerce'); ?></option>
		<option value="scheduled_sale" <?php selected($valittu, 'scheduled_sale'); ?>><?php _e('Tulevat alennukset', 'woocommerce'); ?></option>
	</select>
	<?php
}

add_filter('parse_query', 'wpopas_admin_suodatin_tarjoustuotteet_query');
function wpopas_admin_suodatin_tarjoustuotteet_query($query) {
	if (!is_admin() || !isset($_GET['post_type']) || $_GET['post_type'] !== 'product') {
		return;
	}

	$suodatin = isset($_GET['wpopas_tarjoussuodatin']) ? sanitize_text_field($_GET['wpopas_tarjoussuodatin']) : '';

	if ($suodatin === 'on_sale') {
		$query->set('meta_query', array(
			array(
				'key'     => '_sale_price',
				'value'   => 0,
				'compare' => '>',
				'type'    => 'NUMERIC',
			),
			array(
				'relation' => 'OR',
				array(
					'key'     => '_sale_price_dates_from',
					'value'   => time(),
					'compare' => '<=',
					'type'    => 'NUMERIC',
				),
				array(
					'key'     => '_sale_price_dates_from',
					'compare' => 'NOT EXISTS',
				),
			),
		));
	}

	elseif ($suodatin === 'not_on_sale') {
		$query->set('meta_query', array(
			'relation' => 'OR',
			array(
				'key'     => '_sale_price',
				'value'   => '',
				'compare' => '=',
			),
			array(
				'key'     => '_sale_price',
				'compare' => 'NOT EXISTS',
			),
			array(
				'key'     => '_sale_price',
				'value'   => 0,
				'compare' => '=',
			),
		));
	}

	elseif ($suodatin === 'scheduled_sale') {
		$query->set('meta_query', array(
			'relation' => 'AND',
			array(
				'key'     => '_sale_price_dates_from',
				'value'   => time(),
				'compare' => '>',
				'type'    => 'NUMERIC',
			),
			array(
				'key'     => '_sale_price',
				'value'   => 0,
				'compare' => '>',
				'type'    => 'NUMERIC',
			),
		));
	}
}

Kirjoittaja Niko Vittaniemi

Hei, Olen Niko Vittaniemi. Olen WP-oppaan ylläpitäjä, WPWoofin perustaja ja puuhamies täällä valoisassa nörttiluolassa Keminmaassa. Myyntivetoiset WordPress ja WooCommerce sivustot ovat lähellä sydäntäni Jos koet, että voin auttaa sinua, yhteystietoni löydät kotisivuiltani.

Lisää uusi kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *