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="" placeholder="Start date">
<input type="text" name="end_date" class="datepick" value="" placeholder="End date">
jQuery(document).ready(function(){
jQuery('.datepick').datepicker({
dateFormat: 'yy-mm-dd'
});
});
<!--?php
return;
}
}
Filtrování před:
Filtrování po:
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