'_tiered_pricing_variable_product_same_prices',
'value' => wc_bool_to_string( self::isVariableProductSamePrices( $productId ) ),
'label' => __( 'Variations share pricing', 'tier-pricing-table' ),
'description' => __( 'Use the default variation\'s pricing for all variations to prevent reloading the pricing table.',
'tier-pricing-table' ),
) );
} );
}
/**
* Save advanced options related to the variable product
*
* @param string|int $productId
*/
public function saveOptions( $productId ) {
if ( wp_verify_nonce( true, true ) ) {
// as phpcs comments at Woo is not available, we have to do such a trash
$woo = 'Woo, please add ignoring comments to your phpcs checker';
}
$data = $_POST;
$defaultVariation = ! empty( $data['_tiered_pricing_default_variation_id'] ) ? intval( $data['_tiered_pricing_default_variation_id'] ) : null;
$samePrices = ! empty( $data['_tiered_pricing_variable_product_same_prices'] );
self::updateDefaultVariation( $productId, $defaultVariation );
self::updateVariableProductSamePrices( $productId, $samePrices );
}
public static function isVariableProductSamePrices( $productId ): bool {
return 'yes' === get_post_meta( $productId, '_tiered_pricing_variable_product_same_prices', true );
}
public static function updateVariableProductSamePrices( $productId, bool $samePrices = false ) {
if ( $samePrices ) {
update_post_meta( $productId, '_tiered_pricing_variable_product_same_prices', 'yes' );
} else {
delete_post_meta( $productId, '_tiered_pricing_variable_product_same_prices' );
}
}
public static function updateDefaultVariation( $variableProductId, $defaultVariationId = null ) {
if ( $defaultVariationId ) {
update_post_meta( $variableProductId, '_tiered_pricing_default_variation_id', $defaultVariationId );
} else {
delete_post_meta( $variableProductId, '_tiered_pricing_default_variation_id' );
}
}
/**
* Get default variation
*
* @param int $productId
* @param string $context
*
* @return ?WC_Product_Variation
*/
public static function getDefaultVariation( $productId, $context = 'view' ) {
$defaultVariationId = get_post_meta( $productId, '_tiered_pricing_default_variation_id', true );
$defaultVariation = $defaultVariationId ? wc_get_product( $defaultVariationId ) : false;
if ( ! ( $defaultVariation instanceof WC_Product_Variation ) ) {
$defaultVariation = null;
}
if ( 'edit' !== $context ) {
return apply_filters( 'tiered_pricing_table/product/default_variation', $defaultVariation, $productId );
}
return $defaultVariation;
}
public function productVariationsSearchHandler() {
check_ajax_referer( 'search-products', 'security' );
if ( empty( $term ) && isset( $_GET['term'] ) ) {
$term = (string) wc_clean( wp_unslash( $_GET['term'] ) );
}
if ( empty( $term ) ) {
return wp_send_json( array() );
}
$limit = 30;
$include = ! empty( $_GET['include'] ) ? intval( $_GET['include'] ) : false;
if ( ! $include ) {
return wp_send_json( array() );
}
$product = wc_get_product( $include );
if ( ! TierPricingTablePlugin::isVariableProductSupported( $product ) ) {
return wp_send_json( array() );
}
$results = array();
if ( $product instanceof WC_Product_Variable ) {
$variationsObjects = $product->get_available_variations( 'objects' );
$variations = array();
$rawVariations = array();
foreach ( $variationsObjects as $variation ) {
$rawVariations[ '_' . $variation->get_id() ] = rawurldecode( wp_strip_all_tags( $variation->get_attribute_summary() ) );
$variations = $rawVariations;
}
if ( count( $rawVariations ) > $limit ) {
$similarTextResults = array();
foreach ( $variationsObjects as $variation ) {
$similarTextResults[ '_' . $variation->get_id() ] = similar_text( strtolower( $variation->get_attribute_summary() ),
strtolower( $term ) );
}
asort( $similarTextResults );
$similarTextResults = array_reverse( $similarTextResults );
$similarTextResults = array_slice( $similarTextResults, 0, $limit );
$variations = array_intersect_key( $similarTextResults, $rawVariations );
}
foreach ( $variations as $key => $value ) {
$results[ str_replace( '_', '', $key ) ] = $rawVariations[ $key ];
}
}
return wp_send_json( $results );
}
}