Automattic\WooCommerce\Admin\API\Reports\Stock\Stats

DataStore{}WC 1.0└─ DataStoreInterface, ReportsDataStore

API\Reports\Stock\Stats\DataStore.

Хуков нет.

Использование

$DataStore = new DataStore();
// use class methods

Методы

  1. public set_transient( $low_stock_transient_name, $low_stock_count, $cache_expire )
  2. public array( 'product', 'product_variation' )
  3. public CAST(low_stock_amount_meta.meta_value AS SIGNED)
  4. public count( DISTINCT posts.ID )
  5. public absint( max( get_option( 'woocommerce_notify_no_stock_amount' ), 0 ) )
  6. public if ( false === $count )
  7. public get_data( $query )
  8. public WP_Query()
  9. public AND (
  10. ERROR: no method name found on line ``
  11. ERROR: no method name found on line `)`
  12. ERROR: no method name found on line ``
  13. ERROR: no method name found on line ``
  14. ERROR: no method name found on line `*/`
  15. ERROR: no method name found on line ``
  16. ERROR: no method name found on line ``
  17. ERROR: no method name found on line ``
  18. ERROR: no method name found on line ``
  19. ERROR: no method name found on line ``
  20. ERROR: no method name found on line `/**`
  21. ERROR: no method name found on line `*/`
  22. ERROR: no method name found on line ``
  23. ERROR: no method name found on line ``
  24. ERROR: no method name found on line ``
  25. ERROR: no method name found on line ``
  26. ERROR: no method name found on line `);`
  27. ERROR: no method name found on line ``
  28. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity <= %d`
  29. ERROR: no method name found on line ``
  30. ERROR: no method name found on line `/**`
  31. ERROR: no method name found on line `*`
  32. ERROR: no method name found on line `$status`
  33. ERROR: no method name found on line ``
  34. ERROR: no method name found on line ``
  35. ERROR: no method name found on line ``
  36. ERROR: no method name found on line ``
  37. ERROR: no method name found on line ``
  38. ERROR: no method name found on line ``
  39. ERROR: no method name found on line ``
  40. ERROR: no method name found on line `LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id`
  41. ERROR: no method name found on line `$low_stock_amount,`
  42. ERROR: no method name found on line `}`
  43. ERROR: no method name found on line `*/`
  44. ERROR: no method name found on line `* @return int Low stock count.`
  45. ERROR: no method name found on line ``
  46. ERROR: no method name found on line `global $wpdb;`
  47. ERROR: no method name found on line `$no_stock_amount,`
  48. ERROR: no method name found on line `/**`
  49. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity > %d`
  50. ERROR: no method name found on line `} else {`
  51. ERROR: no method name found on line `*/`
  52. ERROR: no method name found on line ``
  53. ERROR: no method name found on line ``
  54. ERROR: no method name found on line ``
  55. ERROR: no method name found on line ``
  56. ERROR: no method name found on line ``
  57. ERROR: no method name found on line ``
  58. ERROR: no method name found on line ``
  59. ERROR: no method name found on line ``
  60. ERROR: no method name found on line ``
  61. ERROR: no method name found on line ``
  62. ERROR: no method name found on line ``
  63. ERROR: no method name found on line ``
  64. ERROR: no method name found on line ``
  65. ERROR: no method name found on line ``
  66. ERROR: no method name found on line ``
  67. private get_count( $status )
  68. ERROR: no method name found on line ``
  69. ERROR: no method name found on line ``
  70. ERROR: no method name found on line ``
  71. ERROR: no method name found on line ``
  72. ERROR: no method name found on line ``
  73. ERROR: no method name found on line ``
  74. ERROR: no method name found on line ``
  75. ERROR: no method name found on line ``
  76. ERROR: no method name found on line ``
  77. ERROR: no method name found on line ``
  78. ERROR: no method name found on line ``
  79. ERROR: no method name found on line ``
  80. ERROR: no method name found on line ``
  81. ERROR: no method name found on line `LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id`
  82. ERROR: no method name found on line ``
  83. ERROR: no method name found on line `}`
  84. ERROR: no method name found on line ``
  85. ERROR: no method name found on line ``
  86. ERROR: no method name found on line ``
  87. ERROR: no method name found on line ``
  88. ERROR: no method name found on line `*/`
  89. ERROR: no method name found on line ``
  90. ERROR: no method name found on line ``
  91. ERROR: no method name found on line ``
  92. ERROR: no method name found on line ``
  93. ERROR: no method name found on line ``
  94. ERROR: no method name found on line ``
  95. ERROR: no method name found on line ``
  96. ERROR: no method name found on line ``
  97. ERROR: no method name found on line ``
  98. ERROR: no method name found on line ``
  99. ERROR: no method name found on line ``
  100. ERROR: no method name found on line ``
  101. ERROR: no method name found on line ``
  102. ERROR: no method name found on line ``
  103. ERROR: no method name found on line ``
  104. ERROR: no method name found on line ``
  105. ERROR: no method name found on line ``
  106. ERROR: no method name found on line ``
  107. ERROR: no method name found on line ``
  108. ERROR: no method name found on line ``
  109. ERROR: no method name found on line ``
  110. ERROR: no method name found on line ``
  111. ERROR: no method name found on line ``
  112. ERROR: no method name found on line ``
  113. ERROR: no method name found on line ``
  114. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity <= %d`
  115. ERROR: no method name found on line ``
  116. ERROR: no method name found on line ``
  117. ERROR: no method name found on line ``
  118. ERROR: no method name found on line ``
  119. ERROR: no method name found on line ``
  120. ERROR: no method name found on line ``
  121. ERROR: no method name found on line ``
  122. ERROR: no method name found on line ``
  123. ERROR: no method name found on line ``
  124. ERROR: no method name found on line ``
  125. private get_low_stock_count()
  126. ERROR: no method name found on line ``
  127. ERROR: no method name found on line ``
  128. ERROR: no method name found on line ``
  129. ERROR: no method name found on line ``
  130. ERROR: no method name found on line ``
  131. ERROR: no method name found on line ``
  132. ERROR: no method name found on line ``
  133. ERROR: no method name found on line ``
  134. ERROR: no method name found on line ``
  135. ERROR: no method name found on line ``
  136. ERROR: no method name found on line ``
  137. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity > %d`
  138. ERROR: no method name found on line ``
  139. ERROR: no method name found on line ``
  140. ERROR: no method name found on line ``
  141. ERROR: no method name found on line `)`
  142. ERROR: no method name found on line ``
  143. ERROR: no method name found on line ``
  144. ERROR: no method name found on line ``
  145. ERROR: no method name found on line ``
  146. ERROR: no method name found on line ``
  147. ERROR: no method name found on line ``
  148. ERROR: no method name found on line ``
  149. ERROR: no method name found on line ``
  150. ERROR: no method name found on line ``
  151. ERROR: no method name found on line ``
  152. ERROR: no method name found on line ``
  153. ERROR: no method name found on line ``
  154. ERROR: no method name found on line ``
  155. ERROR: no method name found on line `/**`
  156. ERROR: no method name found on line ``
  157. private get_product_count()
  158. ERROR: no method name found on line ``
  159. ERROR: no method name found on line ``
  160. ERROR: no method name found on line ``
  161. ERROR: no method name found on line ``
  162. ERROR: no method name found on line ``
  163. ERROR: no method name found on line ``
  164. ERROR: no method name found on line ``
  165. ERROR: no method name found on line ``
  166. ERROR: no method name found on line ``
  167. ERROR: no method name found on line ``
  168. ERROR: no method name found on line ``
  169. ERROR: no method name found on line ``
  170. ERROR: no method name found on line `global $wpdb;`
  171. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity IS NOT NULL`
  172. ERROR: no method name found on line `$no_stock_amount`
  173. ERROR: no method name found on line `",`
  174. ERROR: no method name found on line ``
  175. ERROR: no method name found on line ``
  176. ERROR: no method name found on line ``
  177. ERROR: no method name found on line ``
  178. ERROR: no method name found on line ``
  179. ERROR: no method name found on line ``
  180. ERROR: no method name found on line ``
  181. ERROR: no method name found on line ``
  182. ERROR: no method name found on line ``
  183. ERROR: no method name found on line ``
  184. ERROR: no method name found on line ``
  185. ERROR: no method name found on line ``
  186. ERROR: no method name found on line ``
  187. ERROR: no method name found on line ``
  188. ERROR: no method name found on line ``
  189. ERROR: no method name found on line ``
  190. ERROR: no method name found on line ``
  191. ERROR: no method name found on line ``
  192. ERROR: no method name found on line ``
  193. ERROR: no method name found on line ``
  194. ERROR: no method name found on line ``
  195. ERROR: no method name found on line ``
  196. ERROR: no method name found on line ``
  197. ERROR: no method name found on line ``
  198. ERROR: no method name found on line ``
  199. ERROR: no method name found on line ``
  200. ERROR: no method name found on line ``
  201. ERROR: no method name found on line ``
  202. ERROR: no method name found on line ``
  203. ERROR: no method name found on line ``
  204. ERROR: no method name found on line ``
  205. ERROR: no method name found on line ``
  206. ERROR: no method name found on line `*`
  207. ERROR: no method name found on line ``
  208. ERROR: no method name found on line ``
  209. ERROR: no method name found on line ``
  210. ERROR: no method name found on line ``
  211. ERROR: no method name found on line ``
  212. ERROR: no method name found on line ``
  213. ERROR: no method name found on line ``
  214. ERROR: no method name found on line ``
  215. ERROR: no method name found on line `}`
  216. ERROR: no method name found on line ``
  217. ERROR: no method name found on line ``
  218. ERROR: no method name found on line ``
  219. ERROR: no method name found on line ``
  220. ERROR: no method name found on line ``
  221. ERROR: no method name found on line ``
  222. ERROR: no method name found on line `)`
  223. ERROR: no method name found on line ``
  224. ERROR: no method name found on line ``
  225. ERROR: no method name found on line ``
  226. ERROR: no method name found on line ``
  227. ERROR: no method name found on line ``
  228. ERROR: no method name found on line ``
  229. ERROR: no method name found on line ``
  230. ERROR: no method name found on line ``
  231. ERROR: no method name found on line ``
  232. ERROR: no method name found on line ``
  233. ERROR: no method name found on line `AND wc_product_meta_lookup.stock_quantity IS NOT NULL`

Код DataStore{} WC 10.5.2

class DataStore extends ReportsDataStore implements DataStoreInterface {

	/**
	 * Get stock counts for the whole store.
	 *
	 * @override ReportsDataStore::get_data()
	 *
	 * @param array $query Not used for the stock stats data store, but needed for the interface.
	 * @return array Array of counts.
	 */
	public function get_data( $query ) {
		$report_data              = array();
		$cache_expire             = DAY_IN_SECONDS * 30;
		$low_stock_transient_name = 'wc_admin_stock_count_lowstock';
		$low_stock_count          = get_transient( $low_stock_transient_name );
		if ( false === $low_stock_count ) {
			$low_stock_count = $this->get_low_stock_count();
			set_transient( $low_stock_transient_name, $low_stock_count, $cache_expire );
		} else {
			$low_stock_count = intval( $low_stock_count );
		}
		$report_data[ ProductStockStatus::LOW_STOCK ] = $low_stock_count;

		$status_options = wc_get_product_stock_status_options();
		foreach ( $status_options as $status => $label ) {
			$transient_name = 'wc_admin_stock_count_' . $status;
			$count          = get_transient( $transient_name );
			if ( false === $count ) {
				$count = $this->get_count( $status );
				set_transient( $transient_name, $count, $cache_expire );
			} else {
				$count = intval( $count );
			}
			$report_data[ $status ] = $count;
		}

		$product_count_transient_name = 'wc_admin_product_count';
		$product_count                = get_transient( $product_count_transient_name );
		if ( false === $product_count ) {
			$product_count = $this->get_product_count();
			set_transient( $product_count_transient_name, $product_count, $cache_expire );
		} else {
			$product_count = intval( $product_count );
		}
		$report_data['products'] = $product_count;
		return $report_data;
	}

	/**
	 * Get low stock count (products with stock < low stock amount, but greater than no stock amount).
	 *
	 * @return int Low stock count.
	 */
	private function get_low_stock_count() {
		global $wpdb;

		$no_stock_amount  = absint( max( get_option( 'woocommerce_notify_no_stock_amount' ), 0 ) );
		$low_stock_amount = absint( max( get_option( 'woocommerce_notify_low_stock_amount' ), 1 ) );

		return (int) $wpdb->get_var(
			$wpdb->prepare(
				"
				SELECT count( DISTINCT posts.ID ) FROM {$wpdb->posts} posts
				LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id
				LEFT JOIN {$wpdb->postmeta} low_stock_amount_meta ON posts.ID = low_stock_amount_meta.post_id AND low_stock_amount_meta.meta_key = '_low_stock_amount'
				WHERE posts.post_type IN ( 'product', 'product_variation' )
				AND wc_product_meta_lookup.stock_quantity IS NOT NULL
				AND wc_product_meta_lookup.stock_status = 'instock'
				AND (
					(
						low_stock_amount_meta.meta_value > ''
						AND wc_product_meta_lookup.stock_quantity <= CAST(low_stock_amount_meta.meta_value AS SIGNED)
						AND wc_product_meta_lookup.stock_quantity > %d
					)
					OR (
						(
							low_stock_amount_meta.meta_value IS NULL OR low_stock_amount_meta.meta_value <= ''
						)
						AND wc_product_meta_lookup.stock_quantity <= %d
						AND wc_product_meta_lookup.stock_quantity > %d
					)
				)
				",
				$no_stock_amount,
				$low_stock_amount,
				$no_stock_amount
			)
		);
	}

	/**
	 * Get count for the passed in stock status.
	 *
	 * @param  string $status Status slug.
	 * @return int Count.
	 */
	private function get_count( $status ) {
		global $wpdb;

		return (int) $wpdb->get_var(
			$wpdb->prepare(
				"
				SELECT count( DISTINCT posts.ID ) FROM {$wpdb->posts} posts
				LEFT JOIN {$wpdb->wc_product_meta_lookup} wc_product_meta_lookup ON posts.ID = wc_product_meta_lookup.product_id
				WHERE posts.post_type IN ( 'product', 'product_variation' )
				AND wc_product_meta_lookup.stock_status = %s
				",
				$status
			)
		);
	}

	/**
	 * Get product count for the store.
	 *
	 * @return int Product count.
	 */
	private function get_product_count() {
		$query_args              = array();
		$query_args['post_type'] = array( 'product', 'product_variation' );
		$query                   = new \WP_Query();
		$query->query( $query_args );
		return intval( $query->found_posts );
	}
}