You've already forked wc-tier-and-package-prices
Release version 1.2.6 - Critical bugfixes for v1.2.5 features
Fixed two critical issues that prevented v1.2.5 features from working: 1. Parent Product Pricing Forms Not Visible (Critical) - Variable products were missing admin UI for parent pricing configuration - v1.2.5 implemented backend logic but forgot the admin forms - Added add_variable_parent_pricing_fields() method - Modified existing methods to skip variable products (simple only) - Parent pricing now fully functional with matching UI 2. Table Headers Not Hiding When Empty - CSS sibling selector ~ doesn't work when thead comes before tbody - Removed incorrect selector, kept only :has() pseudo-class - Added !important flag for proper specificity - Modern browser support (Chrome 105+, Firefox 121+, Safari 15.4+) Changed files: - includes/class-wc-tpp-product-meta.php - Added parent pricing forms - assets/css/admin.css - Fixed header hiding CSS - wc-tier-and-package-prices.php - Version 1.2.6 - composer.json - Version 1.2.6 - CHANGELOG.md - Detailed release notes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,13 +16,127 @@ if (!class_exists('WC_TPP_Product_Meta')) {
|
||||
add_action('woocommerce_product_options_pricing', array($this, 'add_package_pricing_fields'));
|
||||
add_action('woocommerce_process_product_meta', array($this, 'save_tier_package_fields'));
|
||||
|
||||
// Variable product parent hooks (for default pricing)
|
||||
add_action('woocommerce_product_options_pricing', array($this, 'add_variable_parent_pricing_fields'));
|
||||
|
||||
// Variable product variation hooks
|
||||
add_action('woocommerce_variation_options_pricing', array($this, 'add_variation_pricing_fields'), 10, 3);
|
||||
add_action('woocommerce_save_product_variation', array($this, 'save_variation_pricing_fields'), 10, 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add tier and package pricing fields for variable product parents
|
||||
* These serve as defaults for all variations unless overridden
|
||||
*/
|
||||
public function add_variable_parent_pricing_fields() {
|
||||
global $post;
|
||||
|
||||
// Only show for variable products, not simple products
|
||||
$product = wc_get_product($post->ID);
|
||||
if (!$product || !$product->is_type('variable')) {
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="options_group wc-tpp-variable-parent-pricing">
|
||||
<p class="form-field">
|
||||
<strong><?php _e('Default Tier & Package Pricing for All Variations', 'wc-tier-package-prices'); ?></strong>
|
||||
<span class="woocommerce-help-tip" data-tip="<?php esc_attr_e('Set default pricing for all variations. Individual variations can override these defaults with their own specific pricing.', 'wc-tier-package-prices'); ?>"></span>
|
||||
</p>
|
||||
<p class="description" style="margin-left: 12px; margin-bottom: 15px;">
|
||||
<?php _e('Configure default tier and package pricing here. All variations will inherit these settings unless they define their own specific pricing.', 'wc-tier-package-prices'); ?>
|
||||
</p>
|
||||
|
||||
<!-- Tier Pricing Section -->
|
||||
<div class="wc-tpp-parent-tier-pricing" style="margin-left: 12px;">
|
||||
<p><strong><?php _e('Tier Pricing', 'wc-tier-package-prices'); ?></strong></p>
|
||||
<table class="widefat wc-tpp-tiers-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php _e('Min Quantity', 'wc-tier-package-prices'); ?></th>
|
||||
<th><?php _e('Price', 'wc-tier-package-prices'); ?></th>
|
||||
<th><?php _e('Label (optional)', 'wc-tier-package-prices'); ?></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="wc-tpp-tiers-container">
|
||||
<?php
|
||||
$tiers = get_post_meta($post->ID, '_wc_tpp_tiers', true);
|
||||
if (!is_array($tiers)) {
|
||||
$tiers = array();
|
||||
}
|
||||
|
||||
foreach ($tiers as $index => $tier) {
|
||||
$this->render_tier_row($index, $tier);
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="form-field">
|
||||
<button type="button" class="button wc-tpp-add-tier"><?php _e('Add Tier', 'wc-tier-package-prices'); ?></button>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Package Pricing Section -->
|
||||
<div class="wc-tpp-parent-package-pricing" style="margin-left: 12px; margin-top: 20px;">
|
||||
<p><strong><?php _e('Package Pricing', 'wc-tier-package-prices'); ?></strong></p>
|
||||
<table class="widefat wc-tpp-packages-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php _e('Quantity', 'wc-tier-package-prices'); ?></th>
|
||||
<th><?php _e('Price', 'wc-tier-package-prices'); ?></th>
|
||||
<th><?php _e('Label (optional)', 'wc-tier-package-prices'); ?></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="wc-tpp-packages-container">
|
||||
<?php
|
||||
$packages = get_post_meta($post->ID, '_wc_tpp_packages', true);
|
||||
if (!is_array($packages)) {
|
||||
$packages = array();
|
||||
}
|
||||
|
||||
foreach ($packages as $index => $package) {
|
||||
$this->render_package_row($index, $package);
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="form-field">
|
||||
<button type="button" class="button wc-tpp-add-package"><?php _e('Add Package', 'wc-tier-package-prices'); ?></button>
|
||||
</p>
|
||||
|
||||
<?php
|
||||
woocommerce_wp_checkbox(array(
|
||||
'id' => '_wc_tpp_restrict_to_packages',
|
||||
'label' => __('Restrict to Package Quantities (Default)', 'wc-tier-package-prices'),
|
||||
'description' => __('Default restriction setting for all variations. Only allow quantities defined in packages above.', 'wc-tier-package-prices'),
|
||||
'desc_tip' => true,
|
||||
));
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Templates for JavaScript (shared between simple and variable parent) -->
|
||||
<script type="text/html" id="wc-tpp-tier-row-template">
|
||||
<?php $this->render_tier_row('{{INDEX}}', array('min_qty' => '', 'price' => '', 'label' => '')); ?>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="wc-tpp-package-row-template">
|
||||
<?php $this->render_package_row('{{INDEX}}', array('qty' => '', 'price' => '', 'label' => '')); ?>
|
||||
</script>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
public function add_tier_pricing_fields() {
|
||||
global $post;
|
||||
|
||||
// Only show for simple products (variable products use add_variable_parent_pricing_fields)
|
||||
$product = wc_get_product($post->ID);
|
||||
if ($product && $product->is_type('variable')) {
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="options_group wc-tpp-tier-pricing">
|
||||
<p class="form-field">
|
||||
@@ -62,6 +176,13 @@ if (!class_exists('WC_TPP_Product_Meta')) {
|
||||
|
||||
public function add_package_pricing_fields() {
|
||||
global $post;
|
||||
|
||||
// Only show for simple products (variable products use add_variable_parent_pricing_fields)
|
||||
$product = wc_get_product($post->ID);
|
||||
if ($product && $product->is_type('variable')) {
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="options_group wc-tpp-package-pricing">
|
||||
<p class="form-field">
|
||||
|
||||
Reference in New Issue
Block a user