naweskil
10/20/2016 - 5:36 PM

Produtos com desconto em destaque.

Produtos com desconto em destaque.

<?php
/**
 *
 * Informações
 *
 */
?>

<section class="qwp-home-sale">
  <div class="container">
    <div class="row">
      <div class="col-xs-12">
        <h3 class="qwp-mini-title">Ofertas Especiais</h3><!-- /.qwp-mini-title -->

        <!-- Nav tabs -->
        <ul class="nav nav-tabs" role="tablist">
          <?php
          $first = 0;
          // Produtos com até 10% de desconto
          if ( qwp_check_products(0, 10) ): ?>
            <li role="presentation" <?php if ( !$first ) echo 'class="active"'; $first++; ?>><a href="#desconto1" aria-controls="desconto1" role="tab" data-toggle="tab" class="btn btn-default btn-sm">10% Off</a></li>
          <?php endif;

          // Produtos com até 20% de desconto
          if ( qwp_check_products(11, 20) ): ?>
            <li role="presentation" <?php if ( !$first ) echo 'class="active"'; $first++; ?>><a href="#desconto2" aria-controls="desconto2" role="tab" data-toggle="tab" class="btn btn-default btn-sm">20% Off</a></li>
          <?php endif;

          // Produtos com 30% de desconto
          if ( qwp_check_products(21, 30) ): ?>
            <li role="presentation" <?php if ( !$first ) echo 'class="active"'; $first++; ?>><a href="#desconto3" aria-controls="desconto3" role="tab" data-toggle="tab" class="btn btn-default btn-sm">30% Off</a></li>
          <?php endif;

          // Produtos com 40% de desconto
          if ( qwp_check_products(31, 40) ): ?>
            <li role="presentation" <?php if ( !$first ) echo 'class="active"'; $first++; ?>><a href="#desconto4" aria-controls="desconto4" role="tab" data-toggle="tab" class="btn btn-default btn-sm">40% Off</a></li>
          <?php endif;

          // Produtos com 50% de desconto
          if ( qwp_check_products(41, 99) ): ?>
            <li role="presentation" <?php if ( !$first ) echo 'class="active"'; $first++; ?>><a href="#desconto5" aria-controls="desconto5" role="tab" data-toggle="tab" class="btn btn-default btn-sm">50% Off</a></li>
          <?php endif; ?>
        </ul>

        <!-- Tab panes -->
        <div class="tab-content woocommerce">
          <?php
          $first = 0;
          // Produtos com até 10% de desconto
          if ( qwp_check_products(0, 10) ): ?>
            <div role="tabpanel" class="tab-pane fade <?php if ( !$first ) echo 'active in'; $first++; ?>" id="desconto1">
              <?php
              // Lista os Produtos com até 10% de desconto
              qwp_print_products( qwp_check_products(0, 10) ); ?>
            </div>
          <?php endif;

          // Produtos com até 20% de desconto
          if ( qwp_check_products(11, 20) ): ?>
            <div role="tabpanel" class="tab-pane fade <?php if ( !$first ) echo 'active in'; $first++; ?>" id="desconto2">
              <?php
              // Lista os Produtos com até 20% de desconto
              qwp_print_products( qwp_check_products(11, 20) ); ?>
            </div>
          <?php endif;

          // Produtos com 40% de desconto
          if ( qwp_check_products(21, 30) ): ?>
            <div role="tabpanel" class="tab-pane fade <?php if ( !$first ) echo 'active in'; $first++; ?>" id="desconto3">
              <?php
              // Lista os Produtos com até 30% de desconto
              qwp_print_products( qwp_check_products(21, 30) ); ?>
            </div>
          <?php endif;

          // Produtos com 40% de desconto
          if ( qwp_check_products(31, 40) ): ?>
            <div role="tabpanel" class="tab-pane fade <?php if ( !$first ) echo 'active in'; $first++; ?>" id="desconto4">
              <?php
              // Lista os Produtos com 40% de desconto
              qwp_print_products( qwp_check_products(31, 40) ); ?>
            </div>
          <?php endif;

          // Produtos com 40% de desconto
          if ( qwp_check_products(41, 99) ): ?>
            <div role="tabpanel" class="tab-pane fade" id="desconto5">
              <?php
              // Lista os Produtos com 50% de desconto
              qwp_print_products( qwp_check_products(41, 99) ); ?>
            </div>
          <?php endif; ?>
        </div>

      </div><!-- /.col-xs-12 -->
    </div><!-- /.row -->
  </div><!-- /.container -->
</section><!-- /.qwp-home-sale -->
<?php
/**
 *
 * Ao salvar o produto, a porcentagem é armazenada num custom field
 *
 */

add_action( 'save_post', 'qdwp_save_discount_percentage' );
function qdwp_save_discount_percentage( $price, $product ) {
  global $post;

  $regular_price = get_post_meta( $post->ID, '_regular_price', true );
  $sale_price = get_post_meta( $post->ID, '_sale_price', true );

  if( $sale_price ):
    $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 );
    add_post_meta( $post->ID, 'qdwp_product_discount', $percentage );
  endif;
} ?>
<?php
/**
 * Função que verifica se possui produtos com o desconto especificado
 */
function qwp_check_products( $meta_value_min, $meta_value_max ) {

  $custom_field = 'qdwp_product_discount';

  $args = array(
    'numberposts' => 8,
    'post_type' => 'product',
    'orderby' => 'date',
    'order' => 'DESC',
  );

  // Compara se os valores parametrizados são iguais
  if ( $meta_value_min == $meta_value_max ) {
    $meta_value = $meta_value_max = $meta_value_min;
    $args['meta_key'] = $custom_field;
    $args['meta_value'] = $meta_value;

  // Se não for, a função pega os valores diferenciados dentro desse range
  } else {
    $args['meta_query'] = array(
      'relation' => 'AND',
      array(
        'key' => $custom_field,
        'value' => $meta_value_min,
        'compare' => '>='
      ),
      array(
        'key' => $custom_field,
        'value' => $meta_value_max,
        'compare' => '<='
      )
    );
  }

  $query = new WP_Query($args);

  if ( $query->have_posts() )
    return $args;
  else
    return false;
}

/**
 * Função que imprime os produtos em relação aos argumentos listados
 */
function qwp_print_products( $args ) {
  $query = new WP_Query($args);
  if ( $query->have_posts() ):
    woocommerce_product_loop_start();
    while ( $query->have_posts() ): $query->the_post();
      wc_get_template_part('content', 'product');
    endwhile;
    wp_reset_postdata();
    woocommerce_product_loop_end();
    do_action('woocommerce_after_shop_loop');
  elseif ( !woocommerce_product_subcategories( array('before' => woocommerce_product_loop_start(false), 'after' => woocommerce_product_loop_end(false)) ) ):
    wc_get_template('loop/no-products-found.php');
  endif;
}
?>