Created
January 23, 2014 12:07
-
-
Save javierarques/8577543 to your computer and use it in GitHub Desktop.
Woocommerce - Filter orders in wp-admin by products
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*********************************************************************************** | |
* 2. FILTRO POR PRODUCTOS EN PEDIDOS | |
***********************************************************************************/ | |
define('FILTRO_PRODUCT_NAME', 'filtro_producto'); | |
define('ORDER_POST_TYPE', 'shop_order'); | |
/** | |
* Añade la query de las sedes | |
* Hook 'pre_get_posts' | |
* @global type $pagenow | |
* @global type $typenow | |
* @param type $query | |
*/ | |
function query_filter_product_order( $query ){ | |
global $pagenow, $typenow; | |
if ( $query->is_main_query() && is_admin() && $pagenow=='edit.php' && $typenow == ORDER_POST_TYPE && isset($_GET[FILTRO_PRODUCT_NAME])) { | |
global $wpdb; | |
$wpdb->show_errors; | |
$producto_id = $_GET[FILTRO_PRODUCT_NAME]; | |
// 1. Sacamos los "order_items" que tienen nuestro producto | |
$order_items = $wpdb->get_col( $wpdb->prepare("SELECT order_item_id FROM wp_woocommerce_order_itemmeta WHERE meta_key = '_product_id' AND meta_value= %d", $producto_id) ); | |
if (empty($order_items)) | |
return $query; | |
// 2. Sacamos los orders de los $order_items | |
$orders = $wpdb->get_col( $wpdb->prepare("SELECT order_id FROM wp_woocommerce_order_items WHERE order_item_id IN (%s)", implode($order_items)) ); | |
if (empty($orders)) | |
return $query; | |
$query->set('post__in', $orders); | |
} | |
} add_filter( 'pre_get_posts', 'query_filter_product_order' ); | |
/** | |
* Hook que añade el select de sedes a la zona de filtros de edit.php | |
* Hook 'restrict_manage_posts' | |
* @global type $typenow | |
* @global type $wp_query | |
* @return boolean | |
*/ | |
function filter_product_order(){ | |
global $typenow; | |
if ( $typenow != 'shop_order') | |
return false; | |
$productos = get_posts( array('post_type' =>'product', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC')); | |
$selected = empty( $_REQUEST[FILTRO_PRODUCT_NAME] )?'':$_REQUEST[FILTRO_PRODUCT_NAME]; | |
if ( $productos ): | |
?> | |
<select name="<?php echo FILTRO_PRODUCT_NAME ?>"> | |
<option value=""><?php _e('Filtrar por producto', 'instema')?></option> | |
<?php foreach( $productos as $producto ): ?> | |
<option <?php selected($selected, $producto->ID)?> value="<?php echo $producto->ID ?>"><?php echo $producto->post_title ?></option> | |
<?php endforeach;?> | |
</select> | |
<?php endif; | |
} add_action( 'restrict_manage_posts', 'filter_product_order' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment