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