Advertisement
longnguyenwp

Order coupons on store pages

Mar 10th, 2021
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.11 KB | None | 0 0
  1. add_action( 'init', function() {
  2.     remove_action( 'pre_get_posts', 'wpcoupon_pre_get_store_posts', PHP_INT_MAX );
  3.     add_action( 'pre_get_posts', 'custom_wpcoupon_pre_get_store_posts', PHP_INT_MAX );
  4. } );
  5.  
  6. function custom_wpcoupon_pre_get_store_posts( $query ) {
  7.     if ( $query->is_tax( 'coupon_store' ) && $query->is_main_query() ) {
  8.  
  9.         $coupon_type = 'all';
  10.         $available_coupon_type = wpcoupon_get_coupon_types();
  11.  
  12.         $get_coupon_var = ( isset( $_GET['coupon_type'] ) ) ? sanitize_text_field( wp_unslash( $_GET['coupon_type'] ) ) : '';
  13.         $filtered_sortby = ( isset( $_GET['sort_by'] ) ) ? sanitize_text_field( wp_unslash( $_GET['sort_by'] ) ) : 'newest';
  14.         $filtered_cat = ( isset( $_GET['coupon_cat'] ) ) ? sanitize_text_field( wp_unslash( $_GET['coupon_cat'] ) ) : '';
  15.         $filtered_cat = array_filter( explode( ',', $filtered_cat ) );
  16.         if ( isset( $get_coupon_var ) && array_key_exists( $get_coupon_var, $available_coupon_type ) ) {
  17.             $coupon_type = $get_coupon_var;
  18.         }
  19.         $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
  20.         $number_active = intval( wpcoupon_get_option( 'store_number_active', 15 ) );
  21.         $query->set( 'posts_per_page', $number_active );
  22.  
  23.         $query->set( 'paged', $paged );
  24.         $now = current_time( 'timestamp' );
  25.         $meta_query = array();
  26.         if ( 'all' != $coupon_type ) {
  27.             $meta_query = array(
  28.                 'relation' => 'AND',
  29.                 array(
  30.                     'key' => '_wpc_coupon_type',
  31.                     'value' => $coupon_type,
  32.                     'compare' => '=',
  33.                 ),
  34.             );
  35.         }
  36.  
  37.         if ( is_array( $filtered_cat ) && ! empty( $filtered_cat ) ) { // phpcs:ignore
  38.             $query->set(
  39.                 'tax_query',
  40.                 array(
  41.                     'relation' => 'AND',
  42.                     array(
  43.                         'taxonomy' => 'coupon_category',
  44.                         'field'    => 'slug',
  45.                         'terms'    => $filtered_cat,
  46.                         'operator' => 'IN',
  47.                     ),
  48.                 )
  49.             );
  50.         }
  51.         switch ( $filtered_sortby ) {
  52.             case 'popularity':
  53.                 $query->set( 'meta_key', '_wpc_used' );
  54.                 $query->set( 'orderby', 'meta_value_num' );
  55.                 $query->set( 'order', 'desc' );
  56.                 $query->set( 'meta_type', 'NUMERIC' );
  57.                 break;
  58.             case 'ending-soon':
  59.                 $query->set( 'meta_key', '_wpc_expires' );
  60.                 $query->set( 'meta_value', $now );
  61.                 $query->set( 'meta_compare', '>=' );
  62.                 $query->set( 'meta_type', 'NUMERIC' );
  63.                 $query->set( 'orderby', 'meta_value_num' );
  64.                 $query->set( 'order', 'asc' );
  65.                 break;
  66.             case 'expired':
  67.                 $meta_query[] = array(
  68.                     array(
  69.                         'key' => '_wpc_expires',
  70.                         'compare' => 'EXISTS',
  71.                     ),
  72.                     array(
  73.                         'key' => '_wpc_expires',
  74.                         'type' => 'NUMERIC',
  75.                         'value' => 0,
  76.                         'compare' => '>',
  77.                     ),
  78.                     array(
  79.                         'key' => '_wpc_expires',
  80.                         'value' => $now,
  81.                         'type' => 'NUMERIC',
  82.                         'compare' => '<=',
  83.                     ),
  84.                 );
  85.                 $query->set( 'meta_key', '_wpc_expires' );
  86.                 $query->set( 'orderby', 'meta_value' );
  87.                 $query->set( 'meta_type', 'NUMERIC' );
  88.                 $query->set( 'order', 'desc' );
  89.                 break;
  90.             default:
  91.                 $query->set( 'orderby', 'menu_order date' );
  92.                 $query->set( 'order', 'desc' );
  93.                 break;
  94.         }
  95.         if ( ! empty( $meta_query ) ) {
  96.             $query->set( 'meta_query', $meta_query );
  97.         }
  98.     }
  99.     return $query;
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement