'_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 ); } }