File "class-wc-product-factory.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/class-wc-product-factory.php
File size: 2.37 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class WC_Product_Factory
{
    public function get_product($product_id = false, $deprecated = array())
    {
        $product_id = $this->get_product_id($product_id);
        if (!$product_id) {
            return false;
        }
        $product_type = $this->get_product_type($product_id);
        if (!empty($deprecated)) {
            wc_deprecated_argument('args', '3.0', 'Passing args to the product factory is deprecated. If you need to force a type, construct the product class directly.');
            if (isset($deprecated['product_type'])) {
                $product_type = $this->get_classname_from_product_type($deprecated['product_type']);
            }
        }
        $classname = $this->get_product_classname($product_id, $product_type);
        try {
            return new $classname($product_id, $deprecated);
        } catch (Exception $e) {
            return false;
        }
    }
    public static function get_product_classname($product_id, $product_type)
    {
        $classname = apply_filters('woocommerce_product_class', self::get_classname_from_product_type($product_type), $product_type, 'variation' === $product_type ? 'product_variation' : 'product', $product_id);
        if (!$classname || !class_exists($classname)) {
            $classname = 'WC_Product_Simple';
        }
        return $classname;
    }
    public static function get_product_type($product_id)
    {
        $override = apply_filters('woocommerce_product_type_query', false, $product_id);
        if (!$override) {
            return WC_Data_Store::load('product')->get_product_type($product_id);
        } else {
            return $override;
        }
    }
    public static function get_classname_from_product_type($product_type)
    {
        return $product_type ? 'WC_Product_' . implode('_', array_map('ucfirst', explode('-', $product_type))) : false;
    }
    private function get_product_id($product)
    {
        global $post;
        if (false === $product && isset($post, $post->ID) && 'product' === get_post_type($post->ID)) {
            return absint($post->ID);
        } elseif (is_numeric($product)) {
            return $product;
        } elseif ($product instanceof WC_Product) {
            return $product->get_id();
        } elseif (!empty($product->ID)) {
            return $product->ID;
        } else {
            return false;
        }
    }
}