WC_Report_Sales_By_Product::products_widget()publicWC 1.0

Output products widget.

Method of the class: WC_Report_Sales_By_Product{}

No Hooks.

Return

null. Nothing (null).

Usage

$WC_Report_Sales_By_Product = new WC_Report_Sales_By_Product();
$WC_Report_Sales_By_Product->products_widget();

WC_Report_Sales_By_Product::products_widget() code WC 8.6.1

<?php
public function products_widget() {
	?>
	<h4 class="section_title"><span><?php esc_html_e( 'Product search', 'woocommerce' ); ?></span></h4>
	<div class="section">
		<form method="GET">
			<div>
				<?php // @codingStandardsIgnoreStart ?>
				<select class="wc-product-search" style="width:203px;" multiple="multiple" id="product_ids" name="product_ids[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations"></select>
				<button type="submit" class="submit button" value="<?php esc_attr_e( 'Show', 'woocommerce' ); ?>"><?php esc_html_e( 'Show', 'woocommerce' ); ?></button>
				<input type="hidden" name="range" value="<?php echo ( ! empty( $_GET['range'] ) ) ? esc_attr( $_GET['range'] ) : ''; ?>" />
				<input type="hidden" name="start_date" value="<?php echo ( ! empty( $_GET['start_date'] ) ) ? esc_attr( $_GET['start_date'] ) : ''; ?>" />
				<input type="hidden" name="end_date" value="<?php echo ( ! empty( $_GET['end_date'] ) ) ? esc_attr( $_GET['end_date'] ) : ''; ?>" />
				<input type="hidden" name="page" value="<?php echo ( ! empty( $_GET['page'] ) ) ? esc_attr( $_GET['page'] ) : ''; ?>" />
				<input type="hidden" name="tab" value="<?php echo ( ! empty( $_GET['tab'] ) ) ? esc_attr( $_GET['tab'] ) : ''; ?>" />
				<input type="hidden" name="report" value="<?php echo ( ! empty( $_GET['report'] ) ) ? esc_attr( $_GET['report'] ) : ''; ?>" />
				<?php wp_nonce_field( 'custom_range', 'wc_reports_nonce', false ); ?>
				<?php // @codingStandardsIgnoreEnd ?>
			</div>
		</form>
	</div>
	<h4 class="section_title"><span><?php esc_html_e( 'Top sellers', 'woocommerce' ); ?></span></h4>
	<div class="section">
		<table cellspacing="0">
			<?php
			$top_sellers = $this->get_order_report_data(
				array(
					'data'         => array(
						'_product_id' => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => '',
							'name'            => 'product_id',
						),
						'_qty'        => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => 'SUM',
							'name'            => 'order_item_qty',
						),
					),
					'order_by'     => 'order_item_qty DESC',
					'group_by'     => 'product_id',
					'limit'        => 12,
					'query_type'   => 'get_results',
					'filter_range' => true,
					'order_status' => array( 'completed', 'processing', 'on-hold', 'refunded' ),
				)
			);

			if ( $top_sellers ) {
				// @codingStandardsIgnoreStart
				foreach ( $top_sellers as $product ) {
					echo '<tr class="' . ( in_array( $product->product_id, $this->product_ids ) ? 'active' : '' ) . '">
						<td class="count">' . esc_html( $product->order_item_qty ) . '</td>
						<td class="name"><a href="' . esc_url( add_query_arg( 'product_ids', $product->product_id ) ) . '">' . esc_html( get_the_title( $product->product_id ) ) . '</a></td>
						<td class="sparkline">' . $this->sales_sparkline( $product->product_id, 7, 'count' ) . '</td>
					</tr>';
				}
				// @codingStandardsIgnoreEnd
			} else {
				echo '<tr><td colspan="3">' . esc_html__( 'No products found in range', 'woocommerce' ) . '</td></tr>';
			}
			?>
		</table>
	</div>
	<h4 class="section_title"><span><?php esc_html_e( 'Top freebies', 'woocommerce' ); ?></span></h4>
	<div class="section">
		<table cellspacing="0">
			<?php
			$top_freebies = $this->get_order_report_data(
				array(
					'data'         => array(
						'_product_id' => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => '',
							'name'            => 'product_id',
						),
						'_qty'        => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => 'SUM',
							'name'            => 'order_item_qty',
						),
					),
					'where_meta'   => array(
						array(
							'type'       => 'order_item_meta',
							'meta_key'   => '_line_subtotal', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
							'meta_value' => '0', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
							'operator'   => '=',
						),
					),
					'order_by'     => 'order_item_qty DESC',
					'group_by'     => 'product_id',
					'limit'        => 12,
					'query_type'   => 'get_results',
					'filter_range' => true,
				)
			);

			if ( $top_freebies ) {
				// @codingStandardsIgnoreStart
				foreach ( $top_freebies as $product ) {
					echo '<tr class="' . ( in_array( $product->product_id, $this->product_ids ) ? 'active' : '' ) . '">
						<td class="count">' . esc_html( $product->order_item_qty ) . '</td>
						<td class="name"><a href="' . esc_url( add_query_arg( 'product_ids', $product->product_id ) ) . '">' . esc_html( get_the_title( $product->product_id ) ) . '</a></td>
						<td class="sparkline">' . $this->sales_sparkline( $product->product_id, 7, 'count' ) . '</td>
					</tr>';
				}
				// @codingStandardsIgnoreEnd
			} else {
				echo '<tr><td colspan="3">' . esc_html__( 'No products found in range', 'woocommerce' ) . '</td></tr>';
			}
			?>
		</table>
	</div>
	<h4 class="section_title"><span><?php esc_html_e( 'Top earners', 'woocommerce' ); ?></span></h4>
	<div class="section">
		<table cellspacing="0">
			<?php
			$top_earners = $this->get_order_report_data(
				array(
					'data'         => array(
						'_product_id' => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => '',
							'name'            => 'product_id',
						),
						'_line_total' => array(
							'type'            => 'order_item_meta',
							'order_item_type' => 'line_item',
							'function'        => 'SUM',
							'name'            => 'order_item_total',
						),
					),
					'order_by'     => 'order_item_total DESC',
					'group_by'     => 'product_id',
					'limit'        => 12,
					'query_type'   => 'get_results',
					'filter_range' => true,
					'order_status' => array( 'completed', 'processing', 'on-hold', 'refunded' ),
				)
			);

			if ( $top_earners ) {
				// @codingStandardsIgnoreStart
				foreach ( $top_earners as $product ) {
					echo '<tr class="' . ( in_array( $product->product_id, $this->product_ids ) ? 'active' : '' ) . '">
						<td class="count">' . wc_price( $product->order_item_total ) . '</td>
						<td class="name"><a href="' . esc_url( add_query_arg( 'product_ids', $product->product_id ) ) . '">' . esc_html( get_the_title( $product->product_id ) ) . '</a></td>
						<td class="sparkline">' . $this->sales_sparkline( $product->product_id, 7, 'sales' ) . '</td>
					</tr>';
				}
				// @codingStandardsIgnoreEnd
			} else {
				echo '<tr><td colspan="3">' . esc_html__( 'No products found in range', 'woocommerce' ) . '</td></tr>';
			}
			?>
		</table>
	</div>
	<script type="text/javascript">
		jQuery( '.section_title' ).on( 'click', function() {
			var next_section = jQuery( this ).next( '.section' );

			if ( jQuery( next_section ).is( ':visible' ) ) {
				return false;
			}

			jQuery( '.section:visible' ).slideUp();
			jQuery( '.section_title' ).removeClass( 'open' );
			jQuery( this ).addClass( 'open' ).next( '.section' ).slideDown();

			return false;
		} );
		jQuery( '.section' ).slideUp( 100, function() {
			<?php if ( empty( $this->product_ids ) ) : ?>
				jQuery( '.section_title:eq(1)' ).trigger( 'click' );
			<?php endif; ?>
		} );
	</script>
	<?php
}