You've already forked wc-tier-and-package-prices
Release version 1.2.7 - Fix v1.2.6 regressions (both issues still not working)
Fixed both critical issues that were not resolved in v1.2.6: 1. Variable Product Forms Still Not Showing (Critical) - v1.2.6 used wrong hook (woocommerce_product_options_pricing) - That hook only fires for simple products, not variable products - Changed to woocommerce_product_options_general_product_data - This hook fires for all product types after general tab - Forms now appear correctly for variable product parents 2. Table Headers Still Visible When Empty (Critical) - CSS :has() pseudo-class wasn't working reliably - Implemented JavaScript + CSS class approach instead - Added updateTableHeaders() function that toggles has-rows class - Headers hide by default, show only when table has rows - Function called on page load and after all add/remove operations - Works across all browsers without modern CSS requirements Changed files: - includes/class-wc-tpp-product-meta.php - Fixed WooCommerce hook - assets/css/admin.css - Class-based header visibility - assets/js/admin.js - Added updateTableHeaders() and parent handlers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -112,10 +112,16 @@
|
||||
}
|
||||
|
||||
/* Hide table headers when there are no pricing rules */
|
||||
/* Use :has() pseudo-class to check if tbody is empty */
|
||||
.wc-tpp-tiers-table:has(tbody.wc-tpp-tiers-container:empty) thead,
|
||||
.wc-tpp-packages-table:has(tbody.wc-tpp-packages-container:empty) thead {
|
||||
display: none !important;
|
||||
/* Default: hide headers initially, JavaScript will show them when rows are added */
|
||||
.wc-tpp-tiers-table thead,
|
||||
.wc-tpp-packages-table thead {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Show headers when table has pricing rows */
|
||||
.wc-tpp-tiers-table.has-rows thead,
|
||||
.wc-tpp-packages-table.has-rows thead {
|
||||
display: table-header-group !important;
|
||||
}
|
||||
|
||||
/* Checkbox styling improvements */
|
||||
|
||||
@@ -10,6 +10,28 @@
|
||||
let tierIndex = $('.wc-tpp-tier-pricing .wc-tpp-tier-row').length;
|
||||
let packageIndex = $('.wc-tpp-package-pricing .wc-tpp-package-row').length;
|
||||
|
||||
// Function to update table header visibility
|
||||
function updateTableHeaders() {
|
||||
// Check all tier tables
|
||||
$('.wc-tpp-tiers-table').each(function() {
|
||||
const $table = $(this);
|
||||
const $tbody = $table.find('.wc-tpp-tiers-container');
|
||||
const hasRows = $tbody.find('tr').length > 0;
|
||||
$table.toggleClass('has-rows', hasRows);
|
||||
});
|
||||
|
||||
// Check all package tables
|
||||
$('.wc-tpp-packages-table').each(function() {
|
||||
const $table = $(this);
|
||||
const $tbody = $table.find('.wc-tpp-packages-container');
|
||||
const hasRows = $tbody.find('tr').length > 0;
|
||||
$table.toggleClass('has-rows', hasRows);
|
||||
});
|
||||
}
|
||||
|
||||
// Initialize table headers on page load
|
||||
updateTableHeaders();
|
||||
|
||||
// ========================================
|
||||
// Simple Product Handlers
|
||||
// ========================================
|
||||
@@ -21,6 +43,7 @@
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, tierIndex);
|
||||
$('.wc-tpp-tier-pricing .wc-tpp-tiers-container').append(newRow);
|
||||
tierIndex++;
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// Add package (simple products)
|
||||
@@ -30,6 +53,31 @@
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, packageIndex);
|
||||
$('.wc-tpp-package-pricing .wc-tpp-packages-container').append(newRow);
|
||||
packageIndex++;
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// ========================================
|
||||
// Variable Product Parent Handlers
|
||||
// ========================================
|
||||
|
||||
// Add tier (variable product parent default pricing)
|
||||
$('.wc-tpp-variable-parent-pricing .wc-tpp-add-tier').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
const template = $('#wc-tpp-tier-row-template').html();
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, tierIndex);
|
||||
$('.wc-tpp-variable-parent-pricing .wc-tpp-tiers-container').append(newRow);
|
||||
tierIndex++;
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// Add package (variable product parent default pricing)
|
||||
$('.wc-tpp-variable-parent-pricing .wc-tpp-add-package').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
const template = $('#wc-tpp-package-row-template').html();
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, packageIndex);
|
||||
$('.wc-tpp-variable-parent-pricing .wc-tpp-packages-container').append(newRow);
|
||||
packageIndex++;
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// ========================================
|
||||
@@ -50,6 +98,7 @@
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, currentIndex);
|
||||
|
||||
$tbody.append(newRow);
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// Add package (variations)
|
||||
@@ -66,6 +115,7 @@
|
||||
const newRow = template.replace(/\{\{INDEX\}\}/g, currentIndex);
|
||||
|
||||
$tbody.append(newRow);
|
||||
updateTableHeaders();
|
||||
});
|
||||
|
||||
// ========================================
|
||||
@@ -77,6 +127,7 @@
|
||||
e.preventDefault();
|
||||
if (confirm('Are you sure you want to remove this tier?')) {
|
||||
$(this).closest('.wc-tpp-tier-row').remove();
|
||||
updateTableHeaders();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -85,6 +136,7 @@
|
||||
e.preventDefault();
|
||||
if (confirm('Are you sure you want to remove this package?')) {
|
||||
$(this).closest('.wc-tpp-package-row').remove();
|
||||
updateTableHeaders();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user