Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * Grid of products.
- *
- * @author WooThemes
- * @category Widgets
- * @package WooCommerce/Widgets
- * @version 2.3.0
- * @extends WC_Widget
- */
- class Liz_Widget_Products_Grid extends WC_Widget_Products {
- /**
- * Constructor.
- */
- public function __construct() {
- $this->widget_cssclass = 'woocommerce widget_products_grid';
- $this->widget_description = __( 'Display a grid of your products on your site.', 'woocommerce' );
- $this->widget_id = 'woocommerce_products_grid';
- $this->widget_name = __( 'WooCommerce Products Grid', 'woocommerce' );
- $this->settings = array(
- 'title' => array(
- 'type' => 'text',
- 'std' => __( 'Products', 'woocommerce' ),
- 'label' => __( 'Title', 'woocommerce' )
- ),
- 'number' => array(
- 'type' => 'number',
- 'step' => 1,
- 'min' => 1,
- 'max' => '',
- 'std' => 5,
- 'label' => __( 'Number of products', 'woocommerce' )
- ),
- 'row' => array(
- 'type' => 'number',
- 'step' => 1,
- 'min' => 1,
- 'max' => '5',
- 'std' => 5,
- 'label' => __( 'Number of products per row (up to 5)', 'woocommerce' )
- ),
- 'show' => array(
- 'type' => 'select',
- 'std' => '',
- 'label' => __( 'Show', 'woocommerce' ),
- 'options' => array(
- '' => __( 'All Products', 'woocommerce' ),
- 'featured' => __( 'Featured Products', 'woocommerce' ),
- 'onsale' => __( 'On-sale Products', 'woocommerce' ),
- )
- ),
- 'orderby' => array(
- 'type' => 'select',
- 'std' => 'date',
- 'label' => __( 'Order by', 'woocommerce' ),
- 'options' => array(
- 'date' => __( 'Date', 'woocommerce' ),
- 'price' => __( 'Price', 'woocommerce' ),
- 'rand' => __( 'Random', 'woocommerce' ),
- 'sales' => __( 'Sales', 'woocommerce' ),
- )
- ),
- 'order' => array(
- 'type' => 'select',
- 'std' => 'desc',
- 'label' => _x( 'Order', 'Sorting order', 'woocommerce' ),
- 'options' => array(
- 'asc' => __( 'ASC', 'woocommerce' ),
- 'desc' => __( 'DESC', 'woocommerce' ),
- )
- ),
- 'hide_free' => array(
- 'type' => 'checkbox',
- 'std' => 0,
- 'label' => __( 'Hide free products', 'woocommerce' )
- ),
- 'show_hidden' => array(
- 'type' => 'checkbox',
- 'std' => 0,
- 'label' => __( 'Show hidden products', 'woocommerce' )
- )
- 'show_add_to_cart' => array(
- 'type' => 'checkbox',
- 'std' => 0,
- 'label' => __( 'Show Add to Cart Button', 'woocommerce' )
- )
- );
- parent::__construct();
- }
- /**
- * Query the products and return them.
- * @param array $args
- * @param array $instance
- * @return WP_Query
- */
- public function get_products( $args, $instance ) {
- $number = ! empty( $instance['number'] ) ? absint( $instance['number'] ) : $this->settings['number']['std'];
- $row = ! empty( $instance['row'] ) ? absint( $instance['row'] ) : $this->settings['row']['std'];
- $show = ! empty( $instance['show'] ) ? sanitize_title( $instance['show'] ) : $this->settings['show']['std'];
- $orderby = ! empty( $instance['orderby'] ) ? sanitize_title( $instance['orderby'] ) : $this->settings['orderby']['std'];
- $order = ! empty( $instance['order'] ) ? sanitize_title( $instance['order'] ) : $this->settings['order']['std'];
- $query_args = array(
- 'posts_per_page' => $number,
- 'post_status' => 'publish',
- 'post_type' => 'product',
- 'no_found_rows' => 1,
- 'order' => $order,
- 'meta_query' => array()
- );
- if ( empty( $instance['show_hidden'] ) ) {
- $query_args['meta_query'][] = WC()->query->visibility_meta_query();
- $query_args['post_parent'] = 0;
- }
- if ( ! empty( $instance['hide_free'] ) ) {
- $query_args['meta_query'][] = array(
- 'key' => '_price',
- 'value' => 0,
- 'compare' => '>',
- 'type' => 'DECIMAL',
- );
- }
- if ( empty( $instance['show_add_to_cart'] ) ) {
- $query_args['meta_query'][] = WC()->query->visibility_meta_query();
- $query_args['post_parent'] = 0;
- }
- $query_args['meta_query'][] = WC()->query->stock_status_meta_query();
- $query_args['meta_query'] = array_filter( $query_args['meta_query'] );
- switch ( $show ) {
- case 'featured' :
- $query_args['meta_query'][] = array(
- 'key' => '_featured',
- 'value' => 'yes'
- );
- break;
- case 'onsale' :
- $product_ids_on_sale = wc_get_product_ids_on_sale();
- $product_ids_on_sale[] = 0;
- $query_args['post__in'] = $product_ids_on_sale;
- break;
- }
- switch ( $orderby ) {
- case 'price' :
- $query_args['meta_key'] = '_price';
- $query_args['orderby'] = 'meta_value_num';
- break;
- case 'rand' :
- $query_args['orderby'] = 'rand';
- break;
- case 'sales' :
- $query_args['meta_key'] = 'total_sales';
- $query_args['orderby'] = 'meta_value_num';
- break;
- default :
- $query_args['orderby'] = 'date';
- }
- return new WP_Query( apply_filters( 'woocommerce_products_widget_query_args', $query_args ) );
- }
- /**
- * Output widget.
- *
- * @see WP_Widget
- *
- * @param array $args
- * @param array $instance
- */
- public function widget( $args, $instance ) {
- if ( $this->get_cached_widget( $args ) ) {
- return;
- }
- ob_start();
- if ( ( $products = $this->get_products( $args, $instance ) ) && $products->have_posts() ) {
- $this->widget_start( $args, $instance );
- echo apply_filters( 'woocommerce_before_widget_product_list', '<ul class="product_list_widget">' );
- while ( $products->have_posts() ) {
- $products->the_post();
- wc_get_template( 'content-widget-product-grid.php', array( 'show_rating' => false ) );
- }
- echo apply_filters( 'woocommerce_after_widget_product_list', '</ul>' );
- $this->widget_end( $args );
- }
- wp_reset_postdata();
- echo $this->cache_widget( $args, ob_get_clean() );
- }
- }
- function liz_register_widget_products_grid() {
- register_widget( 'Liz_Widget_Products_Grid' );
- }
- add_action( 'widgets_init', 'liz_register_widget_products_grid' );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement