oont-contents/plugins/webappick-product-feed-for-woocommerce/V5/Override/Advance.php
2025-03-31 21:42:48 +02:00

65 lines
1.9 KiB
PHP

<?php
namespace CTXFeed\V5\Override;
use CTXFeed\V5\Utility\Config;
/**
* Class Advance
*
* @package CTXFeed\V5\Override
* @subpackage CTXFeed\V5\Override
*/
class Advance {
public function __construct() {
add_filter( 'woo_feed_filter_product_attribute', [ $this, 'get_product_variation_attribute' ], 10, 4 );
}
/**
* Get Variation attribute values for only in stock variations.
*
* @param $value
* @param $attr
* @param \WC_Product|\WC_Product_Variable $product
* @param \CTXFeed\V5\Utility\Config $config
*
* @return mixed|string
*/
public function get_product_variation_attribute( $value, $attr, $product, $config ) {
//TODO: Make an Option on Filter tab and apply the logic here.
// Also add the option to settings class
if ( $config instanceof Config ) {
$outOfStockEnabled = $config->remove_outofstock_product();
} else {
$outOfStockEnabled = $config['is_outOfStock'];
}
if ( ! $product instanceof \WC_Product ) {
return $value;
}
if ( $outOfStockEnabled && $product->is_type( 'variable' ) && $product->has_child() ) {
$attr = "pa_" . $attr;
$child_ids = $product->get_children();
$variationAttributes = array_keys( $product->get_variation_attributes() );
if ( ! in_array( $attr, $variationAttributes ) ) {
return $value;
}
$newValue = []; //reset the value to concat by child values
foreach ( $child_ids as $id ) {
$child_product = wc_get_product( $id );
$attr_value = $child_product->get_attribute( $attr );
if ( ! empty( $attr_value ) && ( $child_product->is_in_stock() || ( $child_product->managing_stock() && 0 < $child_product->get_stock_quantity() ) ) ) {
$newValue [] = $attr_value;
}
}
$value = ! empty( $newValue ) ? implode( ', ', $newValue ) : $value;
}
return $value;
}
}