Fitrování objednávek ve Woocommerce dle časového období

Pokud provozujete Woocommerce eshop, jistě víte, že v administraci objednávek, máte možnost vypsat všechny za určitý měsíc. Dnes vám ukáži, jak upravit filtraci, pro vybrané časové období.

Věřím tomu, že při větším množství objednávek, je  procházení seznamu za měsíc velmi frustrující. Proto jsem upravil fitrování objednávek tak, aby jste si mohli vybrat datum od a do kterého chcete objednávky vypsat. Vzhledem k tomu, že by vše mělo být co nejvíce uživatelské přívětivé, použijeme datapicker, což je jQuery kalendář, pro výběr data. Výborné je, že WordPress již datapocker obsahuje, takže se nemusíme starat o vkládání jQuery scriptu od třetí strany.

Nejprve začneme kontrolou, zda se jedná administraci, ať zbytečně nenačítáme funkce i na frontendu.

if(is_admin()){
 
}

Mezi složené závorky budeme psát celý kód.

Připravíme si funkci, která nám z vybraných dat upraví query dotaz.

function musilda_filter( $where = '' ) {
global $wpdb;
if( isset( $_REQUEST['start_date'] ) && !empty( $_REQUEST['start_date'] ) ){
 
$start_date=$_REQUEST['start_date'];
$where .= " AND post_date >='$start_date' ";
 
}
 
if( isset( $_REQUEST['end_date'] ) && !empty( $_REQUEST['end_date'] ) ){
 
$end_date=$_REQUEST['end_date'];
$where .=" AND post_date <='$end_date' ";
 
}
 
return $where;
}

Dalším krokem bude přidání where do query. K tomu použijeme pre_get_posts a post_where:

add_filter('pre_get_posts', 'wp_musilda_admin_filters');
 
function wp_musilda_admin_filters($query) {
 
global $pagenow;
 
if( $query->is_admin && ( 'edit.php' == $pagenow ) ) {
 
if(isset($_REQUEST['start_date'])||isset($_REQUEST['end_date'])){
 
add_filter( 'posts_where', 'musilda_filter' );
 
}
 
}
 
return $query;
 
}

 

Protože budeme chtít použít jQuery datepicker, musíme přidat script:

add_action( 'admin_enqueue_scripts', 'enqueue_admin_scripts' );
function enqueue_admin_scripts() {
global $post;
if ( !empty( $post->post_type )
&& $post->post_type == 'shop_order' ){
wp_enqueue_script( 'jquery-ui-datepicker' );
}
}

Kontrola toho, zda se jedná o shop_order je v tomto případě na místě, protože by jsme měli vkládat scripty, jen když je potřebujeme.

Jako poslední zobrazíme pole pro výběr datumů a funkčnost máme hotovou

add_action('restrict_manage_posts', 'wp_musilda_filters_dropdowns',2);
function wp_musilda_filters_dropdowns() {
 
global $post;
if ( !empty( $post->post_type )
&& $post->post_type == 'shop_order' ){
global $wpdb;
 
if( isset( $_REQUEST['start_date'] )
&& isset( $_REQUEST['end_date'] ) ){
 
$start_date = $_REQUEST['start_date'];
$end_date = $_REQUEST['end_date'];
 
}else{
 
$start_date = '';
$end_date = '';
 
}
global $post;
 
?>;
<input type="text" name="start_date" class="datepick" value="<?php echo $start_date;?>" placeholder="Start date">
<input type="text" name="end_date" class="datepick" value="<?php echo $end_date;?>" placeholder="End date">
 
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('.datepick').datepicker({
dateFormat: 'yy-mm-dd'
});
});
</script>
<!--?php
return;
}
 
}
 
</pre-->
 
&nbsp;
 
Filtrování před:
 
<a href="http://musilda.cz/wp-content/uploads/2014/08/Objednávky-‹-Woo-Canvas-–-WordPress.png"><img class="aligncenter size-full wp-image-1969" src="http://musilda.cz/wp-content/uploads/2014/08/Objednávky-‹-Woo-Canvas-–-WordPress.png" alt="Objednávky ‹ Woo Canvas – WordPress" width="596" height="81"></a>
 
Filtrování po:
 
<a href="http://musilda.cz/wp-content/uploads/2014/08/Objednávky-‹-Woo-Canvas-–-WordPress-1-e1409476483550.png"><img class="aligncenter wp-image-1970 size-full" src="http://musilda.cz/wp-content/uploads/2014/08/Objednávky-‹-Woo-Canvas-–-WordPress-1-e1409476550860.png" alt="Objednávky ‹ Woo Canvas – WordPress (1)" width="403" height="371"></a>
 
&nbsp;
 
Pokud budete chtít použít jiný datepicker, stačí změnit použitý script. V případě, že budete chtít stejnou filtraci i u ostatních druhů obsahu, stačí zrušit kontrolu post_type.

Další užitečné snippety najdete na stránce Užitečné snippety pro WooCommerce

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Související články

Přidejte komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *