/** * Get related products based on product category and tags. * * @since 2.7.0 * @param int $product_id Product ID. * @param int $limit Limit of results. * @param array $exclude_ids Exclude IDs from the results. * @return array */ function wc_get_related_products($product_id, $limit = 5, $exclude_ids = array()) { global $wpdb; $product_id = absint($product_id); $exclude_ids = array_merge(array(0, $product_id), $exclude_ids); $transient_name = 'wc_related_' . $product_id; $related_posts = get_transient($transient_name); $limit = $limit > 0 ? $limit : 5; // We want to query related posts if they are not cached, or we don't have enough. if (false === $related_posts || count($related_posts) < $limit) { $cats_array = apply_filters('woocommerce_product_related_posts_relate_by_category', true, $product_id) ? apply_filters('woocommerce_get_related_product_cat_terms', wc_get_product_term_ids($product_id, 'product_cat'), $product_id) : array(); $tags_array = apply_filters('woocommerce_product_related_posts_relate_by_tag', true, $product_id) ? apply_filters('woocommerce_get_related_product_tag_terms', wc_get_product_term_ids($product_id, 'product_tag'), $product_id) : array(); // Don't bother if none are set, unless woocommerce_product_related_posts_force_display is set to true in which case all products are related. if (empty($cats_array) && empty($tags_array) && !apply_filters('woocommerce_product_related_posts_force_display', false, $product_id)) { $related_posts = array(); } else { $data_store = WC_Data_Store::load('product'); $related_posts = $data_store->get_related_products($cats_array, $tags_array, $exclude_ids, $limit + 10, $product_id); } set_transient($transient_name, $related_posts, DAY_IN_SECONDS); } shuffle($related_posts); return array_slice($related_posts, 0, $limit); }
/** * Retrieves related product terms. * @deprecated 2.7.0 Use wc_get_product_term_ids instead. */ protected function get_related_terms($term) { wc_deprecated_function('WC_Product::get_related_terms', '2.7', 'wc_get_product_term_ids'); return array_merge(array(0), wc_get_product_term_ids($this->get_id(), $term)); }