You've already forked wc-tier-and-package-prices
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ece4dd69e | |||
| 3e06137559 | |||
| e0a32821ee |
@@ -7,7 +7,14 @@
|
|||||||
"Bash(mkdir:*)",
|
"Bash(mkdir:*)",
|
||||||
"Bash(composer init:*)",
|
"Bash(composer init:*)",
|
||||||
"Bash(composer install:*)",
|
"Bash(composer install:*)",
|
||||||
"Bash(composer update:*)"
|
"Bash(composer update:*)",
|
||||||
|
"Bash(git add:*)",
|
||||||
|
"Bash(git commit -m \"$\\(cat <<''EOF''\nRelease version 1.1.0 - Package quantity restriction feature\n\nAdded comprehensive package quantity restriction functionality that allows\nlimiting product purchases to predefined package sizes only.\n\nFeatures:\n- Global setting to enable package quantity restrictions\n- Per-product override for quantity restrictions\n- Automatic hiding of quantity input field when restricted\n- Frontend validation with package selection UI\n- Server-side cart validation\n- User-friendly error messages\n- Complete translations for all supported languages\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
|
"Bash(git tag:*)",
|
||||||
|
"Bash(rsync:*)",
|
||||||
|
"Bash(zip -r:*)",
|
||||||
|
"Bash(cat:*)",
|
||||||
|
"Bash(git commit -m \"$\\(cat <<''EOF''\nRelease version 1.1.2 - Catalog button modification\n\nEnhanced package quantity restriction enforcement by replacing \"Add to Cart\"\nbuttons with \"View Options\" links on catalog pages for products with\nquantity restrictions. This prevents customers from attempting to add\nrestricted products directly from shop/category pages.\n\nChanges:\n- Added catalog button modification for restricted products\n- Implemented \"View Options\" button with eye icon styling\n- Created has_quantity_restriction\\(\\) helper method\n- Extended CSS loading to all WooCommerce pages\n- Added modify_catalog_add_to_cart_button\\(\\) filter method\n- Updated translations with 2 new strings \\(en_US, de_DE, de_CH_informal\\)\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\nEOF\n\\)\")"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
72
CHANGELOG.md
72
CHANGELOG.md
@@ -5,6 +5,78 @@ All notable changes to WooCommerce Tier and Package Prices will be documented in
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.1.2] - 2025-12-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Catalog "View Options" button for products with quantity restrictions
|
||||||
|
- Automatic button replacement in shop/category/archive pages
|
||||||
|
- Eye icon (Dashicons) for "View Options" button styling
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- "Add to Cart" button replaced with "View Options" link on catalog pages for restricted products
|
||||||
|
- CSS now loads on all WooCommerce pages (shop, cart, checkout, product)
|
||||||
|
- Catalog buttons now direct to product page instead of adding to cart
|
||||||
|
|
||||||
|
### Technical
|
||||||
|
- Added `has_quantity_restriction()` static method in WC_TPP_Frontend class
|
||||||
|
- Added `modify_catalog_add_to_cart_button()` method in WC_TPP_Frontend class
|
||||||
|
- Extended `woocommerce_loop_add_to_cart_link` filter hook
|
||||||
|
- CSS classes: `wc-tpp-view-options`, `wc-tpp-cart-quantity`, `wc-tpp-restriction-notice`
|
||||||
|
- Updated `enqueue_scripts()` to load CSS on all WooCommerce pages
|
||||||
|
|
||||||
|
### Translations
|
||||||
|
- Added 2 new translatable strings
|
||||||
|
- Updated all translations (en_US, de_DE, de_CH_informal)
|
||||||
|
- Compiled all .mo files with new strings
|
||||||
|
|
||||||
|
## [1.1.1] - 2025-12-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Cart quantity field hiding when package restriction is enabled
|
||||||
|
- Automatic read-only quantity display in cart for restricted products
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Cart quantity input replaced with plain text when restrictions apply
|
||||||
|
- Enhanced cart display to prevent quantity modification for restricted products
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Cart quantity bypass vulnerability for package-restricted products
|
||||||
|
|
||||||
|
### Technical
|
||||||
|
- Added `maybe_hide_cart_quantity_input()` method in WC_TPP_Cart class
|
||||||
|
- Extended `woocommerce_cart_item_quantity` filter hook
|
||||||
|
- CSS class `wc-tpp-cart-quantity` for styled quantity display
|
||||||
|
|
||||||
|
## [1.1.0] - 2025-12-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Package quantity restriction feature
|
||||||
|
- Global setting to restrict quantities to defined package sizes
|
||||||
|
- Per-product setting to restrict quantities to defined package sizes
|
||||||
|
- Frontend validation preventing non-package quantities
|
||||||
|
- Server-side cart validation for package quantities
|
||||||
|
- User-friendly error messages showing available package sizes
|
||||||
|
- Automatic quantity field hiding when restriction is enabled
|
||||||
|
- Package selection UI with highlighted states
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Enhanced package pricing display template with restriction mode support
|
||||||
|
- Improved JavaScript to handle restricted mode package selection
|
||||||
|
- Updated frontend to show "Choose a package size below" notice in restricted mode
|
||||||
|
|
||||||
|
### Technical
|
||||||
|
- Added `validate_package_quantity()` method in WC_TPP_Cart class
|
||||||
|
- Added `maybe_hide_quantity_input()` method in WC_TPP_Frontend class
|
||||||
|
- Extended `woocommerce_add_to_cart_validation` filter hook
|
||||||
|
- Added `wc-tpp-restricted-mode` CSS class for styling
|
||||||
|
- New product meta: `_wc_tpp_restrict_to_packages`
|
||||||
|
- New global option: `wc_tpp_restrict_package_quantities`
|
||||||
|
|
||||||
|
### Translations
|
||||||
|
- Added 7 new translatable strings
|
||||||
|
- Updated all translations (en_US, de_DE, de_CH_informal)
|
||||||
|
- Compiled all .mo files with new strings
|
||||||
|
|
||||||
## [1.0.2] - 2025-12-21
|
## [1.0.2] - 2025-12-21
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -156,6 +156,45 @@
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Catalog "View Options" button */
|
||||||
|
a.wc-tpp-view-options {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
line-height: 1.5;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.wc-tpp-view-options::before {
|
||||||
|
content: "\f06e";
|
||||||
|
font-family: "dashicons";
|
||||||
|
margin-right: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.1em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cart quantity display for restricted products */
|
||||||
|
.wc-tpp-cart-quantity {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 5px 10px;
|
||||||
|
background: #f5f5f5;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Restriction notice */
|
||||||
|
.wc-tpp-restriction-notice {
|
||||||
|
padding: 10px 15px;
|
||||||
|
background: #fff3cd;
|
||||||
|
border: 1px solid #ffc107;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
color: #856404;
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
|
||||||
/* Responsive design */
|
/* Responsive design */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.wc-tpp-packages {
|
.wc-tpp-packages {
|
||||||
|
|||||||
@@ -8,8 +8,9 @@
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
const $quantityInput = $('input.qty');
|
const $quantityInput = $('input.qty');
|
||||||
const $priceDisplay = $('.woocommerce-Price-amount.amount').first();
|
const $priceDisplay = $('.woocommerce-Price-amount.amount').first();
|
||||||
|
const isRestrictedMode = $('.wc-tpp-package-pricing-table').hasClass('wc-tpp-restricted-mode');
|
||||||
|
|
||||||
if ($quantityInput.length === 0) {
|
if ($quantityInput.length === 0 && !isRestrictedMode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +165,30 @@
|
|||||||
const $package = $(this).closest('.wc-tpp-package');
|
const $package = $(this).closest('.wc-tpp-package');
|
||||||
const qty = parseInt($package.data('qty'));
|
const qty = parseInt($package.data('qty'));
|
||||||
|
|
||||||
|
if (isRestrictedMode) {
|
||||||
|
// In restricted mode, we need to set a hidden input or use data attribute
|
||||||
|
// since the quantity field is hidden
|
||||||
|
if ($quantityInput.length === 0) {
|
||||||
|
// Create a hidden quantity input if it doesn't exist
|
||||||
|
if ($('.qty-hidden-input').length === 0) {
|
||||||
|
$('.single_add_to_cart_button').before('<input type="hidden" name="quantity" class="qty qty-hidden-input" value="1" />');
|
||||||
|
}
|
||||||
|
$('.qty-hidden-input').val(qty);
|
||||||
|
} else {
|
||||||
|
$quantityInput.val(qty);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Highlight selected package
|
||||||
|
$('.wc-tpp-package').removeClass('wc-tpp-selected');
|
||||||
|
$package.addClass('wc-tpp-selected');
|
||||||
|
|
||||||
|
// Update price display
|
||||||
|
const price = parseFloat($package.data('price'));
|
||||||
|
const unitPrice = price / qty;
|
||||||
|
updatePrice(unitPrice, 'Package price: ' + formatPrice(price) + ' total');
|
||||||
|
} else {
|
||||||
$quantityInput.val(qty).trigger('change');
|
$quantityInput.val(qty).trigger('change');
|
||||||
|
}
|
||||||
|
|
||||||
// Scroll to add to cart button
|
// Scroll to add to cart button
|
||||||
$('html, body').animate({
|
$('html, body').animate({
|
||||||
@@ -172,8 +196,22 @@
|
|||||||
}, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// In restricted mode, prevent form submission if no package is selected
|
||||||
|
if (isRestrictedMode) {
|
||||||
|
$('form.cart').on('submit', function(e) {
|
||||||
|
const hasSelection = $('.wc-tpp-package.wc-tpp-selected').length > 0;
|
||||||
|
if (!hasSelection) {
|
||||||
|
e.preventDefault();
|
||||||
|
alert('Please select a package size before adding to cart.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Initial update
|
// Initial update
|
||||||
|
if (!isRestrictedMode) {
|
||||||
updatePriceDisplay();
|
updatePriceDisplay();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "magdev/wc-tier-package-prices",
|
"name": "magdev/wc-tier-package-prices",
|
||||||
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
||||||
"version": "1.0.2",
|
"version": "1.1.2",
|
||||||
"type": "wordpress-plugin",
|
"type": "wordpress-plugin",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"authors": [
|
"authors": [
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ class WC_TPP_Cart {
|
|||||||
add_action('woocommerce_before_calculate_totals', array($this, 'apply_tier_package_pricing'), 10, 1);
|
add_action('woocommerce_before_calculate_totals', array($this, 'apply_tier_package_pricing'), 10, 1);
|
||||||
add_filter('woocommerce_cart_item_price', array($this, 'display_cart_item_price'), 10, 3);
|
add_filter('woocommerce_cart_item_price', array($this, 'display_cart_item_price'), 10, 3);
|
||||||
add_filter('woocommerce_cart_item_subtotal', array($this, 'display_cart_item_subtotal'), 10, 3);
|
add_filter('woocommerce_cart_item_subtotal', array($this, 'display_cart_item_subtotal'), 10, 3);
|
||||||
|
add_filter('woocommerce_add_to_cart_validation', array($this, 'validate_package_quantity'), 10, 3);
|
||||||
|
add_filter('woocommerce_cart_item_quantity', array($this, 'maybe_hide_cart_quantity_input'), 10, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply_tier_package_pricing($cart) {
|
public function apply_tier_package_pricing($cart) {
|
||||||
@@ -89,6 +91,71 @@ class WC_TPP_Cart {
|
|||||||
}
|
}
|
||||||
return $subtotal;
|
return $subtotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function validate_package_quantity($passed, $product_id, $quantity) {
|
||||||
|
// Check if restriction is enabled globally or for this product
|
||||||
|
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||||
|
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||||
|
|
||||||
|
if (!$global_restrict && !$product_restrict) {
|
||||||
|
return $passed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get packages for this product
|
||||||
|
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||||
|
|
||||||
|
if (empty($packages) || !is_array($packages)) {
|
||||||
|
return $passed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the quantity matches any package
|
||||||
|
$valid_quantity = false;
|
||||||
|
$available_quantities = array();
|
||||||
|
|
||||||
|
foreach ($packages as $package) {
|
||||||
|
$available_quantities[] = $package['qty'];
|
||||||
|
if ($quantity == $package['qty']) {
|
||||||
|
$valid_quantity = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$valid_quantity) {
|
||||||
|
$product = wc_get_product($product_id);
|
||||||
|
$product_name = $product ? $product->get_name() : __('this product', 'wc-tier-package-prices');
|
||||||
|
|
||||||
|
wc_add_notice(
|
||||||
|
sprintf(
|
||||||
|
__('The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s', 'wc-tier-package-prices'),
|
||||||
|
$quantity,
|
||||||
|
$product_name,
|
||||||
|
implode(', ', $available_quantities)
|
||||||
|
),
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $passed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function maybe_hide_cart_quantity_input($product_quantity, $cart_item_key, $cart_item) {
|
||||||
|
$product_id = $cart_item['product_id'];
|
||||||
|
|
||||||
|
// Check if restriction is enabled globally or for this product
|
||||||
|
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||||
|
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||||
|
|
||||||
|
// Get packages for this product
|
||||||
|
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||||
|
|
||||||
|
// If restriction is enabled and packages exist, show quantity as text only
|
||||||
|
if (($global_restrict || $product_restrict) && !empty($packages)) {
|
||||||
|
return sprintf('<span class="wc-tpp-cart-quantity">%s</span>', $cart_item['quantity']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $product_quantity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new WC_TPP_Cart();
|
new WC_TPP_Cart();
|
||||||
|
|||||||
@@ -14,11 +14,20 @@ class WC_TPP_Frontend {
|
|||||||
add_action('woocommerce_before_add_to_cart_button', array($this, 'display_pricing_table_before'), 20);
|
add_action('woocommerce_before_add_to_cart_button', array($this, 'display_pricing_table_before'), 20);
|
||||||
add_action('woocommerce_after_add_to_cart_button', array($this, 'display_pricing_table_after'), 10);
|
add_action('woocommerce_after_add_to_cart_button', array($this, 'display_pricing_table_after'), 10);
|
||||||
add_action('woocommerce_single_product_summary', array($this, 'display_pricing_table_after_price'), 15);
|
add_action('woocommerce_single_product_summary', array($this, 'display_pricing_table_after_price'), 15);
|
||||||
|
add_action('woocommerce_before_add_to_cart_quantity', array($this, 'maybe_hide_quantity_input'));
|
||||||
|
|
||||||
|
// Modify catalog add to cart button for restricted products
|
||||||
|
add_filter('woocommerce_loop_add_to_cart_link', array($this, 'modify_catalog_add_to_cart_button'), 10, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function enqueue_scripts() {
|
public function enqueue_scripts() {
|
||||||
if (is_product()) {
|
// Enqueue CSS on all WooCommerce pages (for catalog buttons and cart)
|
||||||
|
if (is_woocommerce() || is_cart() || is_checkout() || is_product()) {
|
||||||
wp_enqueue_style('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/css/frontend.css', array(), WC_TPP_VERSION);
|
wp_enqueue_style('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/css/frontend.css', array(), WC_TPP_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enqueue JS only on product pages
|
||||||
|
if (is_product()) {
|
||||||
wp_enqueue_script('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/js/frontend.js', array('jquery'), WC_TPP_VERSION, true);
|
wp_enqueue_script('wc-tpp-frontend', WC_TPP_PLUGIN_URL . 'assets/js/frontend.js', array('jquery'), WC_TPP_VERSION, true);
|
||||||
|
|
||||||
// Localize script with currency settings
|
// Localize script with currency settings
|
||||||
@@ -50,6 +59,24 @@ class WC_TPP_Frontend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function maybe_hide_quantity_input() {
|
||||||
|
global $product;
|
||||||
|
|
||||||
|
if (!$product || !is_a($product, 'WC_Product')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$product_id = $product->get_id();
|
||||||
|
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||||
|
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||||
|
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||||
|
|
||||||
|
// Hide quantity input if restriction is enabled and packages exist
|
||||||
|
if (($global_restrict || $product_restrict) && !empty($packages)) {
|
||||||
|
echo '<style>.quantity { display: none !important; }</style>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function display_pricing_table() {
|
public function display_pricing_table() {
|
||||||
global $product;
|
global $product;
|
||||||
|
|
||||||
@@ -60,6 +87,8 @@ class WC_TPP_Frontend {
|
|||||||
$product_id = $product->get_id();
|
$product_id = $product->get_id();
|
||||||
$tiers = get_post_meta($product_id, '_wc_tpp_tiers', true);
|
$tiers = get_post_meta($product_id, '_wc_tpp_tiers', true);
|
||||||
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||||
|
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||||
|
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||||
|
|
||||||
if (empty($tiers) && empty($packages)) {
|
if (empty($tiers) && empty($packages)) {
|
||||||
return;
|
return;
|
||||||
@@ -68,7 +97,8 @@ class WC_TPP_Frontend {
|
|||||||
WC_TPP_Template_Loader::get_instance()->display('frontend/pricing-table.twig', array(
|
WC_TPP_Template_Loader::get_instance()->display('frontend/pricing-table.twig', array(
|
||||||
'product' => $product,
|
'product' => $product,
|
||||||
'tiers' => $tiers,
|
'tiers' => $tiers,
|
||||||
'packages' => $packages
|
'packages' => $packages,
|
||||||
|
'restrict_to_packages' => $global_restrict || $product_restrict
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,6 +134,53 @@ class WC_TPP_Frontend {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a product has quantity restrictions enabled
|
||||||
|
*
|
||||||
|
* @param int $product_id Product ID
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function has_quantity_restriction($product_id) {
|
||||||
|
$global_restrict = get_option('wc_tpp_restrict_package_quantities', 'no') === 'yes';
|
||||||
|
$product_restrict = get_post_meta($product_id, '_wc_tpp_restrict_to_packages', true) === 'yes';
|
||||||
|
$packages = get_post_meta($product_id, '_wc_tpp_packages', true);
|
||||||
|
|
||||||
|
return ($global_restrict || $product_restrict) && !empty($packages);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modify catalog add to cart button for products with quantity restrictions
|
||||||
|
*
|
||||||
|
* @param string $html Add to cart button HTML
|
||||||
|
* @param WC_Product $product Product object
|
||||||
|
* @return string Modified HTML
|
||||||
|
*/
|
||||||
|
public function modify_catalog_add_to_cart_button($html, $product) {
|
||||||
|
if (!$product || !is_a($product, 'WC_Product')) {
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
$product_id = $product->get_id();
|
||||||
|
|
||||||
|
// Check if product has quantity restrictions
|
||||||
|
if (!self::has_quantity_restriction($product_id)) {
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace add to cart button with "View Options" link
|
||||||
|
$product_url = esc_url($product->get_permalink());
|
||||||
|
$button_text = esc_html__('View Options', 'wc-tier-package-prices');
|
||||||
|
|
||||||
|
$new_html = sprintf(
|
||||||
|
'<a href="%s" class="button wc-tpp-view-options product_type_simple" aria-label="%s">%s</a>',
|
||||||
|
$product_url,
|
||||||
|
esc_attr(sprintf(__('View options for %s', 'wc-tier-package-prices'), $product->get_name())),
|
||||||
|
$button_text
|
||||||
|
);
|
||||||
|
|
||||||
|
return $new_html;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new WC_TPP_Frontend();
|
new WC_TPP_Frontend();
|
||||||
|
|||||||
@@ -69,6 +69,15 @@ class WC_TPP_Product_Meta {
|
|||||||
<p class="form-field">
|
<p class="form-field">
|
||||||
<button type="button" class="button wc-tpp-add-package"><?php _e('Add Package', 'wc-tier-package-prices'); ?></button>
|
<button type="button" class="button wc-tpp-add-package"><?php _e('Add Package', 'wc-tier-package-prices'); ?></button>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
woocommerce_wp_checkbox(array(
|
||||||
|
'id' => '_wc_tpp_restrict_to_packages',
|
||||||
|
'label' => __('Restrict to Package Quantities', 'wc-tier-package-prices'),
|
||||||
|
'description' => __('Only allow quantities defined in packages above', 'wc-tier-package-prices'),
|
||||||
|
'desc_tip' => true,
|
||||||
|
));
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/html" id="wc-tpp-tier-row-template">
|
<script type="text/html" id="wc-tpp-tier-row-template">
|
||||||
@@ -151,6 +160,10 @@ class WC_TPP_Product_Meta {
|
|||||||
} else {
|
} else {
|
||||||
delete_post_meta($post_id, '_wc_tpp_packages');
|
delete_post_meta($post_id, '_wc_tpp_packages');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save package quantity restriction setting
|
||||||
|
$restrict_to_packages = isset($_POST['_wc_tpp_restrict_to_packages']) ? 'yes' : 'no';
|
||||||
|
update_post_meta($post_id, '_wc_tpp_restrict_to_packages', $restrict_to_packages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,15 @@ class WC_TPP_Settings extends WC_Settings_Page {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
array(
|
||||||
|
'title' => __('Restrict to Package Quantities', 'wc-tier-package-prices'),
|
||||||
|
'desc' => __('Limit quantities to defined package sizes only', 'wc-tier-package-prices'),
|
||||||
|
'id' => 'wc_tpp_restrict_package_quantities',
|
||||||
|
'default' => 'no',
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'desc_tip' => __('When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons.', 'wc-tier-package-prices'),
|
||||||
|
),
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'type' => 'sectionend',
|
'type' => 'sectionend',
|
||||||
'id' => 'wc_tpp_settings',
|
'id' => 'wc_tpp_settings',
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
|||||||
# This file is distributed under the GPL v2 or later.
|
# This file is distributed under the GPL v2 or later.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.0.0\n"
|
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
||||||
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
||||||
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
||||||
@@ -23,37 +23,81 @@ msgstr "WooCommerce Staffel- und Paketpreise benötigt eine installierte und akt
|
|||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:21
|
#: includes/class-wc-tpp-admin.php:21
|
||||||
#: includes/class-wc-tpp-admin.php:22
|
#: includes/class-wc-tpp-admin.php:22
|
||||||
|
#: includes/class-wc-tpp-settings.php:28
|
||||||
msgid "Tier & Package Prices"
|
msgid "Tier & Package Prices"
|
||||||
msgstr "Staffel- & Paketpreise"
|
msgstr "Staffel- & Paketpreise"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:40
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Allgemein"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:58
|
||||||
|
msgid "Tier & Package Prices Settings"
|
||||||
|
msgstr "Staffel- & Paketpreise Einstellungen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:60
|
||||||
|
msgid "Configure tier pricing and package pricing options for your WooCommerce products."
|
||||||
|
msgstr "Konfiguriere Staffelpreise und Paketpreise für deine WooCommerce-Produkte."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:54
|
#: includes/class-wc-tpp-admin.php:54
|
||||||
|
#: includes/class-wc-tpp-settings.php:65
|
||||||
msgid "Enable Tier Pricing"
|
msgid "Enable Tier Pricing"
|
||||||
msgstr "Staffelpreise aktivieren"
|
msgstr "Staffelpreise aktivieren"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:58
|
#: includes/class-wc-tpp-admin.php:58
|
||||||
|
#: includes/class-wc-tpp-settings.php:66
|
||||||
msgid "Enable tier pricing for products"
|
msgid "Enable tier pricing for products"
|
||||||
msgstr "Staffelpreise für Produkte aktivieren"
|
msgstr "Staffelpreise für Produkte aktivieren"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:70
|
||||||
|
msgid "Allow quantity-based pricing tiers. Customers get discounted prices when buying in larger quantities."
|
||||||
|
msgstr "Ermöglicht mengenbasierte Preisstaffeln. Kunden erhalten reduzierte Preise beim Kauf grösserer Mengen."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:63
|
#: includes/class-wc-tpp-admin.php:63
|
||||||
|
#: includes/class-wc-tpp-settings.php:74
|
||||||
msgid "Enable Package Pricing"
|
msgid "Enable Package Pricing"
|
||||||
msgstr "Paketpreise aktivieren"
|
msgstr "Paketpreise aktivieren"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:67
|
#: includes/class-wc-tpp-admin.php:67
|
||||||
|
#: includes/class-wc-tpp-settings.php:75
|
||||||
msgid "Enable fixed-price packages for products"
|
msgid "Enable fixed-price packages for products"
|
||||||
msgstr "Festpreis-Pakete für Produkte aktivieren"
|
msgstr "Festpreis-Pakete für Produkte aktivieren"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:79
|
||||||
|
msgid "Allow fixed-price packages with specific quantities. For example: 10 pieces for $50, 25 pieces for $100."
|
||||||
|
msgstr "Ermöglicht Festpreis-Pakete mit bestimmten Mengen. Zum Beispiel: 10 Stück für CHF 50.-, 25 Stück für CHF 100.-."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:72
|
#: includes/class-wc-tpp-admin.php:72
|
||||||
|
#: includes/class-wc-tpp-settings.php:83
|
||||||
msgid "Display Pricing Table"
|
msgid "Display Pricing Table"
|
||||||
msgstr "Preistabelle anzeigen"
|
msgstr "Preistabelle anzeigen"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:76
|
#: includes/class-wc-tpp-admin.php:76
|
||||||
|
#: includes/class-wc-tpp-settings.php:84
|
||||||
msgid "Show tier and package pricing table on product pages"
|
msgid "Show tier and package pricing table on product pages"
|
||||||
msgstr "Staffel- und Paketpreis-Tabelle auf Produktseiten anzeigen"
|
msgstr "Staffel- und Paketpreis-Tabelle auf Produktseiten anzeigen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:88
|
||||||
|
msgid "Display the pricing table to customers on product pages."
|
||||||
|
msgstr "Zeigt die Preistabelle den Kunden auf Produktseiten an."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:81
|
#: includes/class-wc-tpp-admin.php:81
|
||||||
|
#: includes/class-wc-tpp-settings.php:92
|
||||||
msgid "Display Position"
|
msgid "Display Position"
|
||||||
msgstr "Anzeigeposition"
|
msgstr "Anzeigeposition"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:93
|
||||||
|
msgid "Choose where to display the pricing table on product pages."
|
||||||
|
msgstr "Wähle, wo die Preistabelle auf Produktseiten angezeigt werden soll."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:101
|
||||||
|
msgid "Before Add to Cart Button"
|
||||||
|
msgstr "Vor \"In den Warenkorb\"-Button"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:102
|
||||||
|
msgid "After Add to Cart Button"
|
||||||
|
msgstr "Nach \"In den Warenkorb\"-Button"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:85
|
#: includes/class-wc-tpp-admin.php:85
|
||||||
msgid "Before Add to Cart"
|
msgid "Before Add to Cart"
|
||||||
msgstr "Vor \"In den Warenkorb\""
|
msgstr "Vor \"In den Warenkorb\""
|
||||||
@@ -63,9 +107,23 @@ msgid "After Add to Cart"
|
|||||||
msgstr "Nach \"In den Warenkorb\""
|
msgstr "Nach \"In den Warenkorb\""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:87
|
#: includes/class-wc-tpp-admin.php:87
|
||||||
|
#: includes/class-wc-tpp-settings.php:103
|
||||||
msgid "After Price"
|
msgid "After Price"
|
||||||
msgstr "Nach dem Preis"
|
msgstr "Nach dem Preis"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:108
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:76
|
||||||
|
msgid "Restrict to Package Quantities"
|
||||||
|
msgstr "Auf Paketmengen beschränken"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:109
|
||||||
|
msgid "Limit quantities to defined package sizes only"
|
||||||
|
msgstr "Mengen nur auf definierte Paketgrössen beschränken"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:113
|
||||||
|
msgid "When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons."
|
||||||
|
msgstr "Wenn aktiviert, kannst du Produkte nur in den genau definierten Paketmengen kaufen. Das Mengeneingabefeld wird ausgeblendet und durch Paketauswahl-Buttons ersetzt."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:23
|
#: includes/class-wc-tpp-product-meta.php:23
|
||||||
msgid "Tier Pricing"
|
msgid "Tier Pricing"
|
||||||
msgstr "Staffelpreise"
|
msgstr "Staffelpreise"
|
||||||
@@ -90,6 +148,10 @@ msgstr "Festpreis-Pakete mit bestimmten Mengen festlegen. Zum Beispiel: 10 Stüc
|
|||||||
msgid "Add Package"
|
msgid "Add Package"
|
||||||
msgstr "Paket hinzufügen"
|
msgstr "Paket hinzufügen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:77
|
||||||
|
msgid "Only allow quantities defined in packages above"
|
||||||
|
msgstr "Nur oben definierte Paketmengen zulassen"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:90
|
#: includes/class-wc-tpp-product-meta.php:90
|
||||||
msgid "Minimum Quantity"
|
msgid "Minimum Quantity"
|
||||||
msgstr "Mindestmenge"
|
msgstr "Mindestmenge"
|
||||||
@@ -142,6 +204,10 @@ msgstr "Du sparst"
|
|||||||
msgid "Package Deals"
|
msgid "Package Deals"
|
||||||
msgstr "Paketangebote"
|
msgstr "Paketangebote"
|
||||||
|
|
||||||
|
#: templates/frontend/package-pricing-display.twig:11
|
||||||
|
msgid "Choose a package size below"
|
||||||
|
msgstr "Wähle unten eine Paketgrösse"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:123
|
#: includes/class-wc-tpp-frontend.php:123
|
||||||
msgid "pieces"
|
msgid "pieces"
|
||||||
msgstr "Stück"
|
msgstr "Stück"
|
||||||
@@ -161,3 +227,19 @@ msgstr "Paketpreis"
|
|||||||
#: includes/class-wc-tpp-cart.php:66
|
#: includes/class-wc-tpp-cart.php:66
|
||||||
msgid "Volume discount"
|
msgid "Volume discount"
|
||||||
msgstr "Mengenrabatt"
|
msgstr "Mengenrabatt"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:124
|
||||||
|
msgid "this product"
|
||||||
|
msgstr "dieses Produkt"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:128
|
||||||
|
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||||
|
msgstr "Die Menge %1$d ist für %2$s nicht verfügbar. Bitte wähle aus den verfügbaren Paketgrössen: %3$s"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:173
|
||||||
|
msgid "View Options"
|
||||||
|
msgstr "Optionen ansehen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:178
|
||||||
|
msgid "View options for %s"
|
||||||
|
msgstr "Optionen für %s ansehen"
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
|||||||
# This file is distributed under the GPL v2 or later.
|
# This file is distributed under the GPL v2 or later.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.0.0\n"
|
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
||||||
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
||||||
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
||||||
@@ -23,37 +23,81 @@ msgstr "WooCommerce Staffel- und Paketpreise erfordert, dass WooCommerce install
|
|||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:21
|
#: includes/class-wc-tpp-admin.php:21
|
||||||
#: includes/class-wc-tpp-admin.php:22
|
#: includes/class-wc-tpp-admin.php:22
|
||||||
|
#: includes/class-wc-tpp-settings.php:28
|
||||||
msgid "Tier & Package Prices"
|
msgid "Tier & Package Prices"
|
||||||
msgstr "Staffel- & Paketpreise"
|
msgstr "Staffel- & Paketpreise"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:40
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Allgemein"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:58
|
||||||
|
msgid "Tier & Package Prices Settings"
|
||||||
|
msgstr "Staffel- & Paketpreise Einstellungen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:60
|
||||||
|
msgid "Configure tier pricing and package pricing options for your WooCommerce products."
|
||||||
|
msgstr "Konfigurieren Sie Staffelpreise und Paketpreise für Ihre WooCommerce-Produkte."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:54
|
#: includes/class-wc-tpp-admin.php:54
|
||||||
|
#: includes/class-wc-tpp-settings.php:65
|
||||||
msgid "Enable Tier Pricing"
|
msgid "Enable Tier Pricing"
|
||||||
msgstr "Staffelpreise aktivieren"
|
msgstr "Staffelpreise aktivieren"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:58
|
#: includes/class-wc-tpp-admin.php:58
|
||||||
|
#: includes/class-wc-tpp-settings.php:66
|
||||||
msgid "Enable tier pricing for products"
|
msgid "Enable tier pricing for products"
|
||||||
msgstr "Staffelpreise für Produkte aktivieren"
|
msgstr "Staffelpreise für Produkte aktivieren"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:70
|
||||||
|
msgid "Allow quantity-based pricing tiers. Customers get discounted prices when buying in larger quantities."
|
||||||
|
msgstr "Ermöglicht mengenbasierte Preisstaffeln. Kunden erhalten reduzierte Preise beim Kauf größerer Mengen."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:63
|
#: includes/class-wc-tpp-admin.php:63
|
||||||
|
#: includes/class-wc-tpp-settings.php:74
|
||||||
msgid "Enable Package Pricing"
|
msgid "Enable Package Pricing"
|
||||||
msgstr "Paketpreise aktivieren"
|
msgstr "Paketpreise aktivieren"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:67
|
#: includes/class-wc-tpp-admin.php:67
|
||||||
|
#: includes/class-wc-tpp-settings.php:75
|
||||||
msgid "Enable fixed-price packages for products"
|
msgid "Enable fixed-price packages for products"
|
||||||
msgstr "Festpreis-Pakete für Produkte aktivieren"
|
msgstr "Festpreis-Pakete für Produkte aktivieren"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:79
|
||||||
|
msgid "Allow fixed-price packages with specific quantities. For example: 10 pieces for $50, 25 pieces for $100."
|
||||||
|
msgstr "Ermöglicht Festpreis-Pakete mit bestimmten Mengen. Zum Beispiel: 10 Stück für 50€, 25 Stück für 100€."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:72
|
#: includes/class-wc-tpp-admin.php:72
|
||||||
|
#: includes/class-wc-tpp-settings.php:83
|
||||||
msgid "Display Pricing Table"
|
msgid "Display Pricing Table"
|
||||||
msgstr "Preistabelle anzeigen"
|
msgstr "Preistabelle anzeigen"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:76
|
#: includes/class-wc-tpp-admin.php:76
|
||||||
|
#: includes/class-wc-tpp-settings.php:84
|
||||||
msgid "Show tier and package pricing table on product pages"
|
msgid "Show tier and package pricing table on product pages"
|
||||||
msgstr "Staffel- und Paketpreis-Tabelle auf Produktseiten anzeigen"
|
msgstr "Staffel- und Paketpreis-Tabelle auf Produktseiten anzeigen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:88
|
||||||
|
msgid "Display the pricing table to customers on product pages."
|
||||||
|
msgstr "Zeigt die Preistabelle den Kunden auf Produktseiten an."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:81
|
#: includes/class-wc-tpp-admin.php:81
|
||||||
|
#: includes/class-wc-tpp-settings.php:92
|
||||||
msgid "Display Position"
|
msgid "Display Position"
|
||||||
msgstr "Anzeigeposition"
|
msgstr "Anzeigeposition"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:93
|
||||||
|
msgid "Choose where to display the pricing table on product pages."
|
||||||
|
msgstr "Wählen Sie, wo die Preistabelle auf Produktseiten angezeigt werden soll."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:101
|
||||||
|
msgid "Before Add to Cart Button"
|
||||||
|
msgstr "Vor \"In den Warenkorb\"-Button"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:102
|
||||||
|
msgid "After Add to Cart Button"
|
||||||
|
msgstr "Nach \"In den Warenkorb\"-Button"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:85
|
#: includes/class-wc-tpp-admin.php:85
|
||||||
msgid "Before Add to Cart"
|
msgid "Before Add to Cart"
|
||||||
msgstr "Vor \"In den Warenkorb\""
|
msgstr "Vor \"In den Warenkorb\""
|
||||||
@@ -63,9 +107,23 @@ msgid "After Add to Cart"
|
|||||||
msgstr "Nach \"In den Warenkorb\""
|
msgstr "Nach \"In den Warenkorb\""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:87
|
#: includes/class-wc-tpp-admin.php:87
|
||||||
|
#: includes/class-wc-tpp-settings.php:103
|
||||||
msgid "After Price"
|
msgid "After Price"
|
||||||
msgstr "Nach dem Preis"
|
msgstr "Nach dem Preis"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:108
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:76
|
||||||
|
msgid "Restrict to Package Quantities"
|
||||||
|
msgstr "Auf Paketmengen beschränken"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:109
|
||||||
|
msgid "Limit quantities to defined package sizes only"
|
||||||
|
msgstr "Mengen nur auf definierte Paketgrößen beschränken"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:113
|
||||||
|
msgid "When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons."
|
||||||
|
msgstr "Wenn aktiviert, können Kunden Produkte nur in den genau definierten Paketmengen kaufen. Das Mengeneingabefeld wird ausgeblendet und durch Paketauswahl-Buttons ersetzt."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:23
|
#: includes/class-wc-tpp-product-meta.php:23
|
||||||
msgid "Tier Pricing"
|
msgid "Tier Pricing"
|
||||||
msgstr "Staffelpreise"
|
msgstr "Staffelpreise"
|
||||||
@@ -90,6 +148,10 @@ msgstr "Festpreis-Pakete mit bestimmten Mengen festlegen. Zum Beispiel: 10 Stüc
|
|||||||
msgid "Add Package"
|
msgid "Add Package"
|
||||||
msgstr "Paket hinzufügen"
|
msgstr "Paket hinzufügen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:77
|
||||||
|
msgid "Only allow quantities defined in packages above"
|
||||||
|
msgstr "Nur oben definierte Paketmengen zulassen"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:90
|
#: includes/class-wc-tpp-product-meta.php:90
|
||||||
msgid "Minimum Quantity"
|
msgid "Minimum Quantity"
|
||||||
msgstr "Mindestmenge"
|
msgstr "Mindestmenge"
|
||||||
@@ -142,6 +204,10 @@ msgstr "Sie sparen"
|
|||||||
msgid "Package Deals"
|
msgid "Package Deals"
|
||||||
msgstr "Paketangebote"
|
msgstr "Paketangebote"
|
||||||
|
|
||||||
|
#: templates/frontend/package-pricing-display.twig:11
|
||||||
|
msgid "Choose a package size below"
|
||||||
|
msgstr "Wählen Sie unten eine Paketgröße"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:123
|
#: includes/class-wc-tpp-frontend.php:123
|
||||||
msgid "pieces"
|
msgid "pieces"
|
||||||
msgstr "Stück"
|
msgstr "Stück"
|
||||||
@@ -161,3 +227,19 @@ msgstr "Paketpreis"
|
|||||||
#: includes/class-wc-tpp-cart.php:66
|
#: includes/class-wc-tpp-cart.php:66
|
||||||
msgid "Volume discount"
|
msgid "Volume discount"
|
||||||
msgstr "Mengenrabatt"
|
msgstr "Mengenrabatt"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:124
|
||||||
|
msgid "this product"
|
||||||
|
msgstr "dieses Produkt"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:128
|
||||||
|
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||||
|
msgstr "Die Menge %1$d ist für %2$s nicht verfügbar. Bitte wählen Sie aus den verfügbaren Paketgrößen: %3$s"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:173
|
||||||
|
msgid "View Options"
|
||||||
|
msgstr "Optionen ansehen"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:178
|
||||||
|
msgid "View options for %s"
|
||||||
|
msgstr "Optionen für %s ansehen"
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
|||||||
# This file is distributed under the GPL v2 or later.
|
# This file is distributed under the GPL v2 or later.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.0.0\n"
|
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
||||||
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
||||||
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
"PO-Revision-Date: 2025-12-21 00:00+0000\n"
|
||||||
@@ -23,37 +23,81 @@ msgstr "WooCommerce Tier and Package Prices requires WooCommerce to be installed
|
|||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:21
|
#: includes/class-wc-tpp-admin.php:21
|
||||||
#: includes/class-wc-tpp-admin.php:22
|
#: includes/class-wc-tpp-admin.php:22
|
||||||
|
#: includes/class-wc-tpp-settings.php:28
|
||||||
msgid "Tier & Package Prices"
|
msgid "Tier & Package Prices"
|
||||||
msgstr "Tier & Package Prices"
|
msgstr "Tier & Package Prices"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:40
|
||||||
|
msgid "General"
|
||||||
|
msgstr "General"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:58
|
||||||
|
msgid "Tier & Package Prices Settings"
|
||||||
|
msgstr "Tier & Package Prices Settings"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:60
|
||||||
|
msgid "Configure tier pricing and package pricing options for your WooCommerce products."
|
||||||
|
msgstr "Configure tier pricing and package pricing options for your WooCommerce products."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:54
|
#: includes/class-wc-tpp-admin.php:54
|
||||||
|
#: includes/class-wc-tpp-settings.php:65
|
||||||
msgid "Enable Tier Pricing"
|
msgid "Enable Tier Pricing"
|
||||||
msgstr "Enable Tier Pricing"
|
msgstr "Enable Tier Pricing"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:58
|
#: includes/class-wc-tpp-admin.php:58
|
||||||
|
#: includes/class-wc-tpp-settings.php:66
|
||||||
msgid "Enable tier pricing for products"
|
msgid "Enable tier pricing for products"
|
||||||
msgstr "Enable tier pricing for products"
|
msgstr "Enable tier pricing for products"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:70
|
||||||
|
msgid "Allow quantity-based pricing tiers. Customers get discounted prices when buying in larger quantities."
|
||||||
|
msgstr "Allow quantity-based pricing tiers. Customers get discounted prices when buying in larger quantities."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:63
|
#: includes/class-wc-tpp-admin.php:63
|
||||||
|
#: includes/class-wc-tpp-settings.php:74
|
||||||
msgid "Enable Package Pricing"
|
msgid "Enable Package Pricing"
|
||||||
msgstr "Enable Package Pricing"
|
msgstr "Enable Package Pricing"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:67
|
#: includes/class-wc-tpp-admin.php:67
|
||||||
|
#: includes/class-wc-tpp-settings.php:75
|
||||||
msgid "Enable fixed-price packages for products"
|
msgid "Enable fixed-price packages for products"
|
||||||
msgstr "Enable fixed-price packages for products"
|
msgstr "Enable fixed-price packages for products"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:79
|
||||||
|
msgid "Allow fixed-price packages with specific quantities. For example: 10 pieces for $50, 25 pieces for $100."
|
||||||
|
msgstr "Allow fixed-price packages with specific quantities. For example: 10 pieces for $50, 25 pieces for $100."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:72
|
#: includes/class-wc-tpp-admin.php:72
|
||||||
|
#: includes/class-wc-tpp-settings.php:83
|
||||||
msgid "Display Pricing Table"
|
msgid "Display Pricing Table"
|
||||||
msgstr "Display Pricing Table"
|
msgstr "Display Pricing Table"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:76
|
#: includes/class-wc-tpp-admin.php:76
|
||||||
|
#: includes/class-wc-tpp-settings.php:84
|
||||||
msgid "Show tier and package pricing table on product pages"
|
msgid "Show tier and package pricing table on product pages"
|
||||||
msgstr "Show tier and package pricing table on product pages"
|
msgstr "Show tier and package pricing table on product pages"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:88
|
||||||
|
msgid "Display the pricing table to customers on product pages."
|
||||||
|
msgstr "Display the pricing table to customers on product pages."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:81
|
#: includes/class-wc-tpp-admin.php:81
|
||||||
|
#: includes/class-wc-tpp-settings.php:92
|
||||||
msgid "Display Position"
|
msgid "Display Position"
|
||||||
msgstr "Display Position"
|
msgstr "Display Position"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:93
|
||||||
|
msgid "Choose where to display the pricing table on product pages."
|
||||||
|
msgstr "Choose where to display the pricing table on product pages."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:101
|
||||||
|
msgid "Before Add to Cart Button"
|
||||||
|
msgstr "Before Add to Cart Button"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:102
|
||||||
|
msgid "After Add to Cart Button"
|
||||||
|
msgstr "After Add to Cart Button"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:85
|
#: includes/class-wc-tpp-admin.php:85
|
||||||
msgid "Before Add to Cart"
|
msgid "Before Add to Cart"
|
||||||
msgstr "Before Add to Cart"
|
msgstr "Before Add to Cart"
|
||||||
@@ -63,9 +107,23 @@ msgid "After Add to Cart"
|
|||||||
msgstr "After Add to Cart"
|
msgstr "After Add to Cart"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:87
|
#: includes/class-wc-tpp-admin.php:87
|
||||||
|
#: includes/class-wc-tpp-settings.php:103
|
||||||
msgid "After Price"
|
msgid "After Price"
|
||||||
msgstr "After Price"
|
msgstr "After Price"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:108
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:76
|
||||||
|
msgid "Restrict to Package Quantities"
|
||||||
|
msgstr "Restrict to Package Quantities"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:109
|
||||||
|
msgid "Limit quantities to defined package sizes only"
|
||||||
|
msgstr "Limit quantities to defined package sizes only"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:113
|
||||||
|
msgid "When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons."
|
||||||
|
msgstr "When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:23
|
#: includes/class-wc-tpp-product-meta.php:23
|
||||||
msgid "Tier Pricing"
|
msgid "Tier Pricing"
|
||||||
msgstr "Tier Pricing"
|
msgstr "Tier Pricing"
|
||||||
@@ -90,6 +148,10 @@ msgstr "Set fixed-price packages with specific quantities. For example: 10 piece
|
|||||||
msgid "Add Package"
|
msgid "Add Package"
|
||||||
msgstr "Add Package"
|
msgstr "Add Package"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:77
|
||||||
|
msgid "Only allow quantities defined in packages above"
|
||||||
|
msgstr "Only allow quantities defined in packages above"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:90
|
#: includes/class-wc-tpp-product-meta.php:90
|
||||||
msgid "Minimum Quantity"
|
msgid "Minimum Quantity"
|
||||||
msgstr "Minimum Quantity"
|
msgstr "Minimum Quantity"
|
||||||
@@ -142,6 +204,10 @@ msgstr "You Save"
|
|||||||
msgid "Package Deals"
|
msgid "Package Deals"
|
||||||
msgstr "Package Deals"
|
msgstr "Package Deals"
|
||||||
|
|
||||||
|
#: templates/frontend/package-pricing-display.twig:11
|
||||||
|
msgid "Choose a package size below"
|
||||||
|
msgstr "Choose a package size below"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:123
|
#: includes/class-wc-tpp-frontend.php:123
|
||||||
msgid "pieces"
|
msgid "pieces"
|
||||||
msgstr "pieces"
|
msgstr "pieces"
|
||||||
@@ -161,3 +227,19 @@ msgstr "Package price"
|
|||||||
#: includes/class-wc-tpp-cart.php:66
|
#: includes/class-wc-tpp-cart.php:66
|
||||||
msgid "Volume discount"
|
msgid "Volume discount"
|
||||||
msgstr "Volume discount"
|
msgstr "Volume discount"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:124
|
||||||
|
msgid "this product"
|
||||||
|
msgstr "this product"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:128
|
||||||
|
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||||
|
msgstr "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:173
|
||||||
|
msgid "View Options"
|
||||||
|
msgstr "View Options"
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:178
|
||||||
|
msgid "View options for %s"
|
||||||
|
msgstr "View options for %s"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# This file is distributed under the GPL v2 or later.
|
# This file is distributed under the GPL v2 or later.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.0.0\n"
|
"Project-Id-Version: WooCommerce Tier and Package Prices 1.1.2\n"
|
||||||
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
||||||
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
"POT-Creation-Date: 2025-12-21 00:00+0000\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -14,55 +14,96 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 3.0\n"
|
"X-Generator: Poedit 3.0\n"
|
||||||
"X-Domain: wc-tier-package-prices\n"
|
"X-Domain: wc-tier-package-prices\n"
|
||||||
|
|
||||||
#: wc-tier-and-package-prices.php:41
|
#: wc-tier-and-package-prices.php:44
|
||||||
msgid "WooCommerce Tier and Package Prices requires WooCommerce to be installed and active."
|
msgid "WooCommerce Tier and Package Prices requires WooCommerce to be installed and active."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:21
|
#: includes/class-wc-tpp-settings.php:28
|
||||||
#: includes/class-wc-tpp-admin.php:22
|
#: includes/class-wc-tpp-settings.php:58
|
||||||
msgid "Tier & Package Prices"
|
msgid "Tier & Package Prices"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:54
|
#: includes/class-wc-tpp-settings.php:40
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:58
|
||||||
|
msgid "Tier & Package Prices Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:60
|
||||||
|
msgid "Configure tier pricing and package pricing options for your WooCommerce products."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:65
|
||||||
msgid "Enable Tier Pricing"
|
msgid "Enable Tier Pricing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:58
|
#: includes/class-wc-tpp-settings.php:66
|
||||||
msgid "Enable tier pricing for products"
|
msgid "Enable tier pricing for products"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:63
|
#: includes/class-wc-tpp-settings.php:70
|
||||||
|
msgid "Allow quantity-based pricing tiers. Customers get discounted prices when buying in larger quantities."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:74
|
||||||
msgid "Enable Package Pricing"
|
msgid "Enable Package Pricing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:67
|
#: includes/class-wc-tpp-settings.php:75
|
||||||
msgid "Enable fixed-price packages for products"
|
msgid "Enable fixed-price packages for products"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:72
|
#: includes/class-wc-tpp-settings.php:79
|
||||||
|
msgid "Allow fixed-price packages with specific quantities. For example: 10 pieces for $50, 25 pieces for $100."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:83
|
||||||
msgid "Display Pricing Table"
|
msgid "Display Pricing Table"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:76
|
#: includes/class-wc-tpp-settings.php:84
|
||||||
msgid "Show tier and package pricing table on product pages"
|
msgid "Show tier and package pricing table on product pages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:81
|
#: includes/class-wc-tpp-settings.php:88
|
||||||
|
msgid "Display the pricing table to customers on product pages."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:92
|
||||||
msgid "Display Position"
|
msgid "Display Position"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:85
|
#: includes/class-wc-tpp-settings.php:93
|
||||||
msgid "Before Add to Cart"
|
msgid "Choose where to display the pricing table on product pages."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:86
|
#: includes/class-wc-tpp-settings.php:101
|
||||||
msgid "After Add to Cart"
|
msgid "Before Add to Cart Button"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-admin.php:87
|
#: includes/class-wc-tpp-settings.php:102
|
||||||
|
msgid "After Add to Cart Button"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:103
|
||||||
msgid "After Price"
|
msgid "After Price"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:108
|
||||||
|
#: includes/class-wc-tpp-product-meta.php:76
|
||||||
|
msgid "Restrict to Package Quantities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:109
|
||||||
|
msgid "Limit quantities to defined package sizes only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php:113
|
||||||
|
msgid "When enabled, customers can only purchase products in the exact quantities defined in packages. The quantity input field will be hidden and replaced with package selection buttons."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:23
|
#: includes/class-wc-tpp-product-meta.php:23
|
||||||
msgid "Tier Pricing"
|
msgid "Tier Pricing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -87,80 +128,105 @@ msgstr ""
|
|||||||
msgid "Add Package"
|
msgid "Add Package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:90
|
#: includes/class-wc-tpp-product-meta.php:77
|
||||||
|
msgid "Only allow quantities defined in packages above"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/admin/tier-row.twig:9
|
||||||
msgid "Minimum Quantity"
|
msgid "Minimum Quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:91
|
#: templates/admin/tier-row.twig:13
|
||||||
|
#: templates/admin/package-row.twig:13
|
||||||
msgid "e.g., 10"
|
msgid "e.g., 10"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:94
|
#: templates/admin/tier-row.twig:16
|
||||||
msgid "Price per Unit"
|
msgid "Price per Unit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:95
|
#: templates/admin/tier-row.twig:21
|
||||||
#: includes/class-wc-tpp-product-meta.php:114
|
|
||||||
msgid "e.g., 9.99"
|
msgid "e.g., 9.99"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:97
|
#: templates/admin/tier-row.twig:25
|
||||||
#: includes/class-wc-tpp-product-meta.php:120
|
#: templates/admin/package-row.twig:30
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:109
|
#: templates/admin/package-row.twig:9
|
||||||
|
#: templates/frontend/tier-pricing-table.twig:13
|
||||||
msgid "Quantity"
|
msgid "Quantity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:113
|
#: templates/admin/package-row.twig:20
|
||||||
msgid "Fixed Price"
|
msgid "Fixed Price"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:117
|
#: templates/admin/package-row.twig:18
|
||||||
|
msgid "e.g., 99.99"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/admin/package-row.twig:24
|
||||||
msgid "Label (Optional)"
|
msgid "Label (Optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-product-meta.php:118
|
#: templates/admin/package-row.twig:29
|
||||||
msgid "e.g., Starter Pack"
|
msgid "e.g., Starter Pack"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:71
|
#: templates/frontend/tier-pricing-table.twig:9
|
||||||
msgid "Volume Discounts"
|
msgid "Volume Discounts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:75
|
#: templates/frontend/tier-pricing-table.twig:14
|
||||||
msgid "Quantity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:76
|
|
||||||
msgid "Price per Unit"
|
msgid "Price per Unit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:77
|
#: templates/frontend/tier-pricing-table.twig:15
|
||||||
msgid "You Save"
|
msgid "You Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:110
|
#: templates/frontend/package-pricing-display.twig:8
|
||||||
msgid "Package Deals"
|
msgid "Package Deals"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:123
|
#: templates/frontend/package-pricing-display.twig:11
|
||||||
|
msgid "Choose a package size below"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/frontend/package-pricing-display.twig:20
|
||||||
msgid "pieces"
|
msgid "pieces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:129
|
#: templates/frontend/package-pricing-display.twig:24
|
||||||
msgid "per unit"
|
msgid "per unit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-frontend.php:133
|
#: templates/frontend/package-pricing-display.twig:28
|
||||||
msgid "Select Package"
|
msgid "Select Package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-cart.php:63
|
#: includes/class-wc-tpp-cart.php:76
|
||||||
msgid "Package price"
|
msgid "Package price"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-cart.php:66
|
#: includes/class-wc-tpp-cart.php:79
|
||||||
msgid "Volume discount"
|
msgid "Volume discount"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:124
|
||||||
|
msgid "this product"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-cart.php:128
|
||||||
|
msgid "The quantity %1$d is not available for %2$s. Please choose from the available package sizes: %3$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:173
|
||||||
|
msgid "View Options"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-frontend.php:178
|
||||||
|
msgid "View options for %s"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
198
releases/RELEASE-INFO-1.0.2.md
Normal file
198
releases/RELEASE-INFO-1.0.2.md
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
# WooCommerce Tier and Package Prices - Release 1.0.2
|
||||||
|
|
||||||
|
**Release Date:** December 21, 2025
|
||||||
|
**Version:** 1.0.2
|
||||||
|
**Package Size:** 396 KB
|
||||||
|
**Git Tag:** v1.0.2
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
**File:** `wc-tier-and-package-prices-1.0.2.zip`
|
||||||
|
|
||||||
|
### Checksums
|
||||||
|
|
||||||
|
**SHA256:**
|
||||||
|
```
|
||||||
|
c1a5339da10b3625156b8fff4ec848e4a1318d6edc497bd5026cfe0a3ef39daa
|
||||||
|
```
|
||||||
|
|
||||||
|
**MD5:**
|
||||||
|
```
|
||||||
|
830f443ce4b65e2ca9cfede3257bc4f5
|
||||||
|
```
|
||||||
|
|
||||||
|
## What's New in 1.0.2
|
||||||
|
|
||||||
|
### Major Changes
|
||||||
|
- ✅ **Settings Migrated to WooCommerce Settings Page**
|
||||||
|
- Settings now appear as a dedicated tab: **WooCommerce > Settings > Tier & Package Prices**
|
||||||
|
- Removed standalone submenu for better integration
|
||||||
|
- Consistent UI with native WooCommerce settings
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
- 🔄 Uses WooCommerce's native settings API (WC_Settings_Page)
|
||||||
|
- 🎨 Better integration with WooCommerce admin interface
|
||||||
|
- 💾 Automatic settings persistence via WooCommerce
|
||||||
|
- 🌍 Updated all translations with new settings strings
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
- ✨ WC_TPP_Settings class for proper WooCommerce integration
|
||||||
|
- 📝 9 new translatable strings in all languages
|
||||||
|
- 🔧 Enhanced tooltips and descriptions for better UX
|
||||||
|
|
||||||
|
### Technical Changes
|
||||||
|
- Implemented `woocommerce_get_settings_pages` filter hook
|
||||||
|
- Uses `WC_Admin_Settings` for rendering and saving
|
||||||
|
- Removed custom Twig settings template
|
||||||
|
- Updated all translation files to version 1.0.2
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- ❌ Standalone settings submenu (WooCommerce > Tier & Package Prices)
|
||||||
|
- ❌ Custom settings template (templates/admin/settings-page.twig)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Download the ZIP file: `wc-tier-and-package-prices-1.0.2.zip`
|
||||||
|
2. Log in to your WordPress admin panel
|
||||||
|
3. Navigate to **Plugins > Add New > Upload Plugin**
|
||||||
|
4. Choose the downloaded ZIP file
|
||||||
|
5. Click **Install Now**
|
||||||
|
6. After installation, click **Activate Plugin**
|
||||||
|
7. Go to **WooCommerce > Settings > Tier & Package Prices** to configure
|
||||||
|
|
||||||
|
### Upgrade from 1.0.1
|
||||||
|
|
||||||
|
This is a **minor update** with improved settings integration. No data migration needed.
|
||||||
|
|
||||||
|
**Steps:**
|
||||||
|
1. Deactivate the current version
|
||||||
|
2. Upload and activate version 1.0.2
|
||||||
|
3. Your existing settings will be automatically preserved
|
||||||
|
4. Settings location changed: Now under **WooCommerce > Settings** tab
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- **WordPress:** 6.0 or higher
|
||||||
|
- **PHP:** 7.4 or higher
|
||||||
|
- **WooCommerce:** 8.0 or higher
|
||||||
|
|
||||||
|
## Translation Updates
|
||||||
|
|
||||||
|
All translation files updated with new strings:
|
||||||
|
|
||||||
|
### New Translations (9 new strings)
|
||||||
|
1. "General" - Settings section
|
||||||
|
2. "Tier & Package Prices Settings" - Section title
|
||||||
|
3. "Configure tier pricing and package pricing options..." - Description
|
||||||
|
4. "Allow quantity-based pricing tiers..." - Tooltip
|
||||||
|
5. "Allow fixed-price packages..." - Tooltip
|
||||||
|
6. "Display the pricing table to customers..." - Tooltip
|
||||||
|
7. "Choose where to display the pricing table..." - Description
|
||||||
|
8. "Before Add to Cart Button" - Option
|
||||||
|
9. "After Add to Cart Button" - Option
|
||||||
|
|
||||||
|
### Languages Included
|
||||||
|
- 🇺🇸 **English (US)** - en_US - Fully updated
|
||||||
|
- 🇩🇪 **German (Germany)** - de_DE - Fully updated (formal "Sie")
|
||||||
|
- 🇨🇭 **German (Switzerland, Informal)** - de_CH_informal - Fully updated (informal "du")
|
||||||
|
|
||||||
|
## Package Contents
|
||||||
|
|
||||||
|
The installation package includes:
|
||||||
|
|
||||||
|
### Core Files
|
||||||
|
- `wc-tier-and-package-prices.php` (v1.0.2)
|
||||||
|
- `composer.json` - Updated to 1.0.2
|
||||||
|
- `CHANGELOG.md` - Full version history
|
||||||
|
|
||||||
|
### New/Modified Files
|
||||||
|
- `includes/class-wc-tpp-settings.php` ✨ NEW
|
||||||
|
- `includes/class-wc-tpp-admin.php` - Updated
|
||||||
|
- All translation files (.po/.mo) - Updated
|
||||||
|
|
||||||
|
### Complete Directory Structure
|
||||||
|
```
|
||||||
|
wc-tier-and-package-prices/
|
||||||
|
├── assets/ # CSS and JavaScript
|
||||||
|
│ ├── css/
|
||||||
|
│ └── js/
|
||||||
|
├── includes/ # PHP classes
|
||||||
|
│ ├── class-wc-tpp-admin.php
|
||||||
|
│ ├── class-wc-tpp-cart.php
|
||||||
|
│ ├── class-wc-tpp-frontend.php
|
||||||
|
│ ├── class-wc-tpp-product-meta.php
|
||||||
|
│ ├── class-wc-tpp-settings.php ✨ NEW
|
||||||
|
│ └── class-wc-tpp-template-loader.php
|
||||||
|
├── languages/ # Translation files (all updated)
|
||||||
|
│ ├── wc-tier-package-prices-de_CH_informal.po/mo
|
||||||
|
│ ├── wc-tier-package-prices-de_DE.po/mo
|
||||||
|
│ ├── wc-tier-package-prices-en_US.po/mo
|
||||||
|
│ └── wc-tier-package-prices.pot
|
||||||
|
├── templates/ # Twig templates
|
||||||
|
│ ├── admin/
|
||||||
|
│ │ ├── package-row.twig
|
||||||
|
│ │ └── tier-row.twig
|
||||||
|
│ └── frontend/
|
||||||
|
│ ├── package-pricing-display.twig
|
||||||
|
│ ├── pricing-table.twig
|
||||||
|
│ └── tier-pricing-table.twig
|
||||||
|
├── vendor/ # Composer dependencies
|
||||||
|
│ └── twig/twig/ (v3.22.2)
|
||||||
|
├── CHANGELOG.md
|
||||||
|
├── README.md
|
||||||
|
└── composer.json
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features (Complete List)
|
||||||
|
|
||||||
|
### Tier Pricing
|
||||||
|
- ✅ Quantity-based discount tiers
|
||||||
|
- ✅ Automatic price calculation
|
||||||
|
- ✅ Volume discount display
|
||||||
|
|
||||||
|
### Package Pricing
|
||||||
|
- ✅ Fixed-price bundles
|
||||||
|
- ✅ Custom package labels
|
||||||
|
- ✅ Multiple package options per product
|
||||||
|
|
||||||
|
### Admin Features
|
||||||
|
- ✅ **WooCommerce Settings integration** (NEW in 1.0.2)
|
||||||
|
- ✅ Easy-to-use product meta boxes
|
||||||
|
- ✅ Configurable display positions
|
||||||
|
- ✅ Native WooCommerce UI
|
||||||
|
|
||||||
|
### Frontend Features
|
||||||
|
- ✅ Beautiful pricing tables (Twig templates)
|
||||||
|
- ✅ Real-time cart updates
|
||||||
|
- ✅ Responsive design
|
||||||
|
- ✅ 3 languages supported
|
||||||
|
|
||||||
|
## Migration Notes
|
||||||
|
|
||||||
|
### Settings Location Changed
|
||||||
|
**Old Location:** WooCommerce > Tier & Package Prices
|
||||||
|
**New Location:** WooCommerce > Settings > Tier & Package Prices
|
||||||
|
|
||||||
|
All your existing settings are automatically preserved and will appear in the new location.
|
||||||
|
|
||||||
|
### Benefits of New Location
|
||||||
|
1. ✅ Better discoverability - users expect settings under Settings
|
||||||
|
2. ✅ Consistent with WooCommerce patterns
|
||||||
|
3. ✅ Native WooCommerce UI/UX
|
||||||
|
4. ✅ Better mobile support
|
||||||
|
5. ✅ Follows WordPress/WooCommerce best practices
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- **Documentation:** See README.md and USAGE_EXAMPLES.md
|
||||||
|
- **Changelog:** See CHANGELOG.md for detailed changes
|
||||||
|
- **Issues:** https://src.bundespruefstelle.ch/wc-tier-package-prices/issues
|
||||||
|
- **Author:** Marco Graetsch
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
GPL v2 or later - https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Production Ready:** This package includes optimized autoloader and no development dependencies.
|
||||||
345
releases/RELEASE-INFO-1.1.0.md
Normal file
345
releases/RELEASE-INFO-1.1.0.md
Normal file
@@ -0,0 +1,345 @@
|
|||||||
|
# WooCommerce Tier and Package Prices - Release 1.1.0
|
||||||
|
|
||||||
|
**Release Date:** December 21, 2025
|
||||||
|
**Version:** 1.1.0
|
||||||
|
**Package Size:** 387 KB
|
||||||
|
**Git Tag:** v1.1.0
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
**File:** `wc-tier-and-package-prices-1.1.0.zip`
|
||||||
|
|
||||||
|
### Checksums
|
||||||
|
|
||||||
|
**SHA256:**
|
||||||
|
```
|
||||||
|
da6b462f3dc297b282ed0da258b78fd9f2f82f3e76289c4c8fadd1ac9e02c55b
|
||||||
|
```
|
||||||
|
|
||||||
|
**MD5:**
|
||||||
|
```
|
||||||
|
ef68125c54b0c10f04ba82d48a98b4aa
|
||||||
|
```
|
||||||
|
|
||||||
|
## What's New in 1.1.0
|
||||||
|
|
||||||
|
### Major Features
|
||||||
|
- ✨ **Package Quantity Restriction** - NEW
|
||||||
|
- Limit product purchases to predefined package sizes only
|
||||||
|
- Perfect for bulk-only sales, sample packs, or fixed bundle quantities
|
||||||
|
- Global and per-product configuration options
|
||||||
|
|
||||||
|
### New Settings
|
||||||
|
- 🌍 **Global Restriction Setting**
|
||||||
|
- Enable quantity restrictions site-wide
|
||||||
|
- Located in: WooCommerce > Settings > Tier & Package Prices
|
||||||
|
- Description: "Limit quantities to defined package sizes only"
|
||||||
|
|
||||||
|
- 📦 **Per-Product Restriction Setting**
|
||||||
|
- Override global setting on individual products
|
||||||
|
- Located in: Product Edit > Package Pricing section
|
||||||
|
- Checkbox: "Restrict to Package Quantities"
|
||||||
|
|
||||||
|
### Frontend Enhancements
|
||||||
|
- 🎨 **Enhanced Package Selection UI**
|
||||||
|
- Automatic quantity field hiding when restriction is enabled
|
||||||
|
- Clear notice: "Choose a package size below"
|
||||||
|
- Visual package selection with highlighted states
|
||||||
|
- Responsive package selection buttons
|
||||||
|
|
||||||
|
- ✅ **Client-Side Validation**
|
||||||
|
- JavaScript prevents form submission without package selection
|
||||||
|
- Alert message guides users to select a package
|
||||||
|
- Real-time visual feedback on selection
|
||||||
|
|
||||||
|
### Backend Validation
|
||||||
|
- 🛡️ **Server-Side Cart Validation**
|
||||||
|
- Validates quantity matches defined packages
|
||||||
|
- Prevents manual quantity manipulation
|
||||||
|
- User-friendly error messages
|
||||||
|
- Example: "The quantity 15 is not available for Product Name. Please choose from the available package sizes: 10, 20, 50"
|
||||||
|
|
||||||
|
### Technical Improvements
|
||||||
|
- New method: `WC_TPP_Cart::validate_package_quantity()`
|
||||||
|
- New method: `WC_TPP_Frontend::maybe_hide_quantity_input()`
|
||||||
|
- Enhanced `woocommerce_add_to_cart_validation` filter integration
|
||||||
|
- Added `wc-tpp-restricted-mode` CSS class
|
||||||
|
- Added `wc-tpp-package-selectable` CSS class for styling
|
||||||
|
- New product meta key: `_wc_tpp_restrict_to_packages`
|
||||||
|
- New global option: `wc_tpp_restrict_package_quantities`
|
||||||
|
|
||||||
|
### Translations
|
||||||
|
- Added 7 new translatable strings
|
||||||
|
- Updated all language files (en_US, de_DE, de_CH_informal)
|
||||||
|
- All .mo files recompiled with new strings
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.0.zip`
|
||||||
|
2. Log in to your WordPress admin panel
|
||||||
|
3. Navigate to **Plugins > Add New > Upload Plugin**
|
||||||
|
4. Choose the downloaded ZIP file
|
||||||
|
5. Click **Install Now**
|
||||||
|
6. After installation, click **Activate Plugin**
|
||||||
|
7. Go to **WooCommerce > Settings > Tier & Package Prices** to configure
|
||||||
|
|
||||||
|
### Upgrade from 1.0.x
|
||||||
|
|
||||||
|
This is a **minor version** update with new features. No data migration needed.
|
||||||
|
|
||||||
|
**Steps:**
|
||||||
|
1. Deactivate the current version
|
||||||
|
2. Upload and activate version 1.1.0
|
||||||
|
3. All existing settings and data will be automatically preserved
|
||||||
|
4. Review new restriction settings if desired
|
||||||
|
|
||||||
|
### Upgrade from 1.0.2
|
||||||
|
|
||||||
|
No breaking changes. Safe to upgrade directly. New restriction feature is disabled by default.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- **WordPress:** 6.0 or higher
|
||||||
|
- **PHP:** 7.4 or higher
|
||||||
|
- **WooCommerce:** 8.0 or higher
|
||||||
|
|
||||||
|
## New Strings Translation Reference
|
||||||
|
|
||||||
|
All new strings in this release:
|
||||||
|
|
||||||
|
### Settings Page
|
||||||
|
1. "Restrict to Package Quantities" - Checkbox label
|
||||||
|
2. "Limit quantities to defined package sizes only" - Checkbox description
|
||||||
|
3. "When enabled, customers can only purchase..." - Tooltip text
|
||||||
|
|
||||||
|
### Product Meta Box
|
||||||
|
4. "Restrict to Package Quantities" - Checkbox label (same as above)
|
||||||
|
5. "Only allow quantities defined in packages above" - Tooltip text
|
||||||
|
|
||||||
|
### Frontend Display
|
||||||
|
6. "Choose a package size below" - User notice in restricted mode
|
||||||
|
|
||||||
|
### Cart Validation
|
||||||
|
7. "this product" - Fallback product name
|
||||||
|
8. "The quantity %1$d is not available for %2$s..." - Error message template
|
||||||
|
|
||||||
|
## Use Cases
|
||||||
|
|
||||||
|
### Bulk-Only Sales
|
||||||
|
Enable restriction globally to sell products only in bulk quantities.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Package 1: 100 units at $500
|
||||||
|
- Package 2: 250 units at $1,100
|
||||||
|
- Package 3: 500 units at $2,000
|
||||||
|
|
||||||
|
Customers can only purchase these exact quantities.
|
||||||
|
|
||||||
|
### Sample Packs
|
||||||
|
Create fixed sample packs with no custom quantities.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Starter Pack: 10 items
|
||||||
|
- Trial Pack: 25 items
|
||||||
|
- Full Pack: 50 items
|
||||||
|
|
||||||
|
### Promotional Bundles
|
||||||
|
Offer promotional pricing only for specific bundle sizes.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Holiday Bundle: 12 units (seasonal pricing)
|
||||||
|
- Party Pack: 24 units (bulk discount)
|
||||||
|
- Wholesale Bundle: 100 units (wholesale pricing)
|
||||||
|
|
||||||
|
## Configuration Examples
|
||||||
|
|
||||||
|
### Example 1: Site-Wide Restriction
|
||||||
|
|
||||||
|
**Scenario:** All products should only be sold in packages
|
||||||
|
|
||||||
|
**Configuration:**
|
||||||
|
1. Go to WooCommerce > Settings > Tier & Package Prices
|
||||||
|
2. Check "Restrict to Package Quantities"
|
||||||
|
3. Save changes
|
||||||
|
4. Configure package sizes for each product
|
||||||
|
|
||||||
|
**Result:** All products with packages defined will enforce quantity restrictions
|
||||||
|
|
||||||
|
### Example 2: Per-Product Restriction
|
||||||
|
|
||||||
|
**Scenario:** Only specific products need quantity restrictions
|
||||||
|
|
||||||
|
**Configuration:**
|
||||||
|
1. Leave global setting unchecked
|
||||||
|
2. Edit the specific product
|
||||||
|
3. Scroll to Package Pricing section
|
||||||
|
4. Check "Restrict to Package Quantities"
|
||||||
|
5. Update product
|
||||||
|
|
||||||
|
**Result:** Only that product enforces restrictions
|
||||||
|
|
||||||
|
### Example 3: Mixed Approach
|
||||||
|
|
||||||
|
**Scenario:** Most products are restricted, but some allow custom quantities
|
||||||
|
|
||||||
|
**Configuration:**
|
||||||
|
1. Enable global restriction
|
||||||
|
2. For products that should allow custom quantities, simply don't define any packages
|
||||||
|
3. Products without packages defined won't show restrictions
|
||||||
|
|
||||||
|
## Feature Compatibility
|
||||||
|
|
||||||
|
### Works With
|
||||||
|
- ✅ WooCommerce 8.0 - 10.0
|
||||||
|
- ✅ WordPress 6.0+
|
||||||
|
- ✅ HPOS (High-Performance Order Storage)
|
||||||
|
- ✅ All WooCommerce themes
|
||||||
|
- ✅ Tier pricing (can use both features together)
|
||||||
|
- ✅ Package pricing (required for restriction)
|
||||||
|
- ✅ All pricing table display positions
|
||||||
|
|
||||||
|
### Requirements for Restriction Feature
|
||||||
|
- Product must have at least one package defined
|
||||||
|
- Either global or per-product restriction must be enabled
|
||||||
|
- Package pricing must be enabled in settings
|
||||||
|
|
||||||
|
## Package Contents
|
||||||
|
|
||||||
|
The installation package includes all files from version 1.0.2 plus:
|
||||||
|
|
||||||
|
### Modified Files
|
||||||
|
- `wc-tier-and-package-prices.php` - Version updated to 1.1.0
|
||||||
|
- `composer.json` - Version updated to 1.1.0
|
||||||
|
- `CHANGELOG.md` - Added v1.1.0 section
|
||||||
|
- `includes/class-wc-tpp-settings.php` - Added restriction setting
|
||||||
|
- `includes/class-wc-tpp-product-meta.php` - Added per-product checkbox
|
||||||
|
- `includes/class-wc-tpp-frontend.php` - Added quantity hiding logic
|
||||||
|
- `includes/class-wc-tpp-cart.php` - Added validation method
|
||||||
|
- `assets/js/frontend.js` - Added restricted mode handling
|
||||||
|
- `templates/frontend/package-pricing-display.twig` - Added restriction notice
|
||||||
|
- `templates/frontend/pricing-table.twig` - Pass restriction flag
|
||||||
|
- All translation files (.po/.mo) - Updated with new strings
|
||||||
|
|
||||||
|
### Complete Directory Structure
|
||||||
|
```
|
||||||
|
wc-tier-and-package-prices/
|
||||||
|
├── assets/
|
||||||
|
│ ├── css/
|
||||||
|
│ │ ├── admin.css
|
||||||
|
│ │ └── frontend.css
|
||||||
|
│ └── js/
|
||||||
|
│ ├── admin.js
|
||||||
|
│ └── frontend.js (UPDATED)
|
||||||
|
├── includes/
|
||||||
|
│ ├── class-wc-tpp-admin.php
|
||||||
|
│ ├── class-wc-tpp-cart.php (UPDATED)
|
||||||
|
│ ├── class-wc-tpp-frontend.php (UPDATED)
|
||||||
|
│ ├── class-wc-tpp-product-meta.php (UPDATED)
|
||||||
|
│ ├── class-wc-tpp-settings.php (UPDATED)
|
||||||
|
│ └── class-wc-tpp-template-loader.php
|
||||||
|
├── languages/ (ALL UPDATED)
|
||||||
|
│ ├── wc-tier-package-prices-de_CH_informal.po/mo
|
||||||
|
│ ├── wc-tier-package-prices-de_DE.po/mo
|
||||||
|
│ ├── wc-tier-package-prices-en_US.po/mo
|
||||||
|
│ └── wc-tier-package-prices.pot
|
||||||
|
├── templates/
|
||||||
|
│ ├── admin/
|
||||||
|
│ │ ├── package-row.twig
|
||||||
|
│ │ └── tier-row.twig
|
||||||
|
│ └── frontend/
|
||||||
|
│ ├── package-pricing-display.twig (UPDATED)
|
||||||
|
│ ├── pricing-table.twig (UPDATED)
|
||||||
|
│ └── tier-pricing-table.twig
|
||||||
|
├── vendor/ (Twig v3.22.2)
|
||||||
|
├── CHANGELOG.md (UPDATED)
|
||||||
|
├── composer.json (UPDATED)
|
||||||
|
└── wc-tier-and-package-prices.php (UPDATED)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features (Complete List)
|
||||||
|
|
||||||
|
### Tier Pricing
|
||||||
|
- ✅ Quantity-based discount tiers
|
||||||
|
- ✅ Automatic price calculation
|
||||||
|
- ✅ Volume discount display
|
||||||
|
|
||||||
|
### Package Pricing
|
||||||
|
- ✅ Fixed-price bundles
|
||||||
|
- ✅ Custom package labels
|
||||||
|
- ✅ Multiple package options per product
|
||||||
|
- ✅ **NEW:** Quantity restriction to packages only
|
||||||
|
|
||||||
|
### Admin Features
|
||||||
|
- ✅ WooCommerce Settings integration
|
||||||
|
- ✅ Easy-to-use product meta boxes
|
||||||
|
- ✅ Configurable display positions
|
||||||
|
- ✅ Native WooCommerce UI
|
||||||
|
- ✅ **NEW:** Global restriction setting
|
||||||
|
- ✅ **NEW:** Per-product restriction override
|
||||||
|
|
||||||
|
### Frontend Features
|
||||||
|
- ✅ Beautiful pricing tables (Twig templates)
|
||||||
|
- ✅ Real-time cart updates
|
||||||
|
- ✅ Responsive design
|
||||||
|
- ✅ 3 languages supported
|
||||||
|
- ✅ **NEW:** Package-only selection mode
|
||||||
|
- ✅ **NEW:** Automatic quantity field hiding
|
||||||
|
- ✅ **NEW:** Visual package selection
|
||||||
|
|
||||||
|
### Validation & Security
|
||||||
|
- ✅ **NEW:** Client-side JavaScript validation
|
||||||
|
- ✅ **NEW:** Server-side cart validation
|
||||||
|
- ✅ **NEW:** User-friendly error messages
|
||||||
|
- ✅ WooCommerce HPOS compatible
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
|
||||||
|
**None.** This release is fully backward compatible.
|
||||||
|
|
||||||
|
The new restriction feature is disabled by default and must be explicitly enabled.
|
||||||
|
|
||||||
|
## Migration Notes
|
||||||
|
|
||||||
|
### From 1.0.2
|
||||||
|
- No migration needed
|
||||||
|
- New settings appear automatically in admin
|
||||||
|
- Feature is disabled by default
|
||||||
|
|
||||||
|
### Settings Location
|
||||||
|
All settings remain in: **WooCommerce > Settings > Tier & Package Prices**
|
||||||
|
|
||||||
|
### Data Preservation
|
||||||
|
- All existing tier pricing data preserved
|
||||||
|
- All existing package pricing data preserved
|
||||||
|
- All product meta data preserved
|
||||||
|
- No database changes required
|
||||||
|
|
||||||
|
## Known Limitations
|
||||||
|
|
||||||
|
### Current Version
|
||||||
|
1. Restriction only works when packages are defined
|
||||||
|
2. Cannot restrict to tier quantities (only packages)
|
||||||
|
3. Restriction applies to entire product (no variation-level control)
|
||||||
|
|
||||||
|
### Future Enhancements
|
||||||
|
These features may be added in future versions:
|
||||||
|
- Variation-level restriction control
|
||||||
|
- Restrict to tier quantities option
|
||||||
|
- Minimum/maximum package selection limits
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- **Documentation:** See README.md and CHANGELOG.md
|
||||||
|
- **Previous Release:** See RELEASE-INFO-1.0.2.md
|
||||||
|
- **Issues:** https://src.bundespruefstelle.ch/wc-tier-package-prices/issues
|
||||||
|
- **Author:** Marco Graetsch
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
GPL v2 or later - https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Production Ready:** This package includes optimized autoloader and no development dependencies.
|
||||||
|
|
||||||
|
**What's Next:** Version 1.1.0 completes the package restriction feature set. Future versions may add variation-level controls and tier quantity restrictions.
|
||||||
272
releases/RELEASE-INFO-1.1.1.md
Normal file
272
releases/RELEASE-INFO-1.1.1.md
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
# WooCommerce Tier and Package Prices - Release 1.1.1
|
||||||
|
|
||||||
|
**Release Date:** December 21, 2025
|
||||||
|
**Version:** 1.1.1
|
||||||
|
**Package Size:** 403 KB
|
||||||
|
**Git Tag:** v1.1.1
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
**File:** `wc-tier-and-package-prices-1.1.1.zip`
|
||||||
|
|
||||||
|
### Checksums
|
||||||
|
|
||||||
|
**SHA256:**
|
||||||
|
```
|
||||||
|
b951f8b7ddd2bad6b3415d4583709fdf88f66aea4eae70110c903757ff53e045
|
||||||
|
```
|
||||||
|
|
||||||
|
**MD5:**
|
||||||
|
```
|
||||||
|
51c4f8a7c3ccede2d2005f2fe3ebe44e
|
||||||
|
```
|
||||||
|
|
||||||
|
## What's New in 1.1.1
|
||||||
|
|
||||||
|
This is a **patch release** that enhances the package quantity restriction feature introduced in v1.1.0 by preventing cart quantity bypass.
|
||||||
|
|
||||||
|
### Security Enhancement
|
||||||
|
- **Fixed:** Cart quantity bypass vulnerability for package-restricted products
|
||||||
|
- Customers could previously modify quantities in the cart to bypass package restrictions
|
||||||
|
- This patch ensures restrictions are enforced throughout the entire purchase flow
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
- **Cart Quantity Field Hiding** - NEW
|
||||||
|
- Automatic hiding of quantity input field in cart when restrictions are enabled
|
||||||
|
- Cart displays quantity as read-only text for restricted products
|
||||||
|
- Prevents manual quantity modification in shopping cart
|
||||||
|
- Seamless integration with existing restriction settings
|
||||||
|
|
||||||
|
### Technical Improvements
|
||||||
|
- Added `maybe_hide_cart_quantity_input()` method in WC_TPP_Cart class
|
||||||
|
- Extended `woocommerce_cart_item_quantity` filter hook
|
||||||
|
- New CSS class: `wc-tpp-cart-quantity` for styled quantity display
|
||||||
|
- Enhanced cart validation and display consistency
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Cart quantity field hiding when package restriction is enabled
|
||||||
|
- Automatic read-only quantity display in cart for restricted products
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Cart quantity input replaced with plain text when restrictions apply
|
||||||
|
- Enhanced cart display to prevent quantity modification for restricted products
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Cart quantity bypass vulnerability for package-restricted products
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### New Installation
|
||||||
|
|
||||||
|
1. Download the ZIP file: `wc-tier-and-package-prices-1.1.1.zip`
|
||||||
|
2. Log in to your WordPress admin panel
|
||||||
|
3. Navigate to **Plugins > Add New > Upload Plugin**
|
||||||
|
4. Choose the downloaded ZIP file
|
||||||
|
5. Click **Install Now**
|
||||||
|
6. After installation, click **Activate Plugin**
|
||||||
|
7. Go to **WooCommerce > Settings > Tier & Package Prices** to configure
|
||||||
|
|
||||||
|
### Upgrade from 1.1.0
|
||||||
|
|
||||||
|
This is a **patch release** with a security fix. No configuration changes needed.
|
||||||
|
|
||||||
|
**Steps:**
|
||||||
|
1. Deactivate version 1.1.0
|
||||||
|
2. Upload and activate version 1.1.1
|
||||||
|
3. All existing settings and data will be automatically preserved
|
||||||
|
4. No additional configuration required
|
||||||
|
|
||||||
|
### Upgrade from 1.0.x
|
||||||
|
|
||||||
|
Safe to upgrade directly. This version includes all features from v1.1.0 plus the cart quantity hiding enhancement.
|
||||||
|
|
||||||
|
**Steps:**
|
||||||
|
1. Deactivate the current version
|
||||||
|
2. Upload and activate version 1.1.1
|
||||||
|
3. All existing settings and data will be automatically preserved
|
||||||
|
4. Review the new package restriction features if desired
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- **WordPress:** 6.0 or higher
|
||||||
|
- **PHP:** 7.4 or higher
|
||||||
|
- **WooCommerce:** 8.0 or higher
|
||||||
|
|
||||||
|
## Complete Package Restriction Feature (v1.1.0 + v1.1.1)
|
||||||
|
|
||||||
|
The package quantity restriction feature now provides complete enforcement across all touchpoints:
|
||||||
|
|
||||||
|
### Product Page (v1.1.0)
|
||||||
|
- ✅ Quantity field automatically hidden when restriction enabled
|
||||||
|
- ✅ "Choose a package size below" notice displayed
|
||||||
|
- ✅ Visual package selection with highlighted states
|
||||||
|
- ✅ JavaScript validation prevents form submission without package selection
|
||||||
|
|
||||||
|
### Add to Cart Validation (v1.1.0)
|
||||||
|
- ✅ Server-side validation on add-to-cart
|
||||||
|
- ✅ User-friendly error messages showing available package sizes
|
||||||
|
- ✅ Prevents manual quantity manipulation via form fields
|
||||||
|
|
||||||
|
### Cart Page (v1.1.1 - NEW)
|
||||||
|
- ✅ Quantity field hidden/replaced with read-only text
|
||||||
|
- ✅ Prevents cart quantity modification
|
||||||
|
- ✅ Consistent restriction enforcement
|
||||||
|
- ✅ No bypass via cart updates
|
||||||
|
|
||||||
|
### Settings
|
||||||
|
- ✅ Global setting to enable restrictions site-wide
|
||||||
|
- ✅ Per-product override for individual products
|
||||||
|
- ✅ Located in: WooCommerce > Settings > Tier & Package Prices
|
||||||
|
|
||||||
|
## Use Cases
|
||||||
|
|
||||||
|
### Scenario 1: Bulk-Only Sales
|
||||||
|
Enable restriction globally to sell products only in bulk quantities.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Package 1: 100 units at $500
|
||||||
|
- Package 2: 250 units at $1,100
|
||||||
|
- Package 3: 500 units at $2,000
|
||||||
|
|
||||||
|
Customers can only purchase these exact quantities on both product page and in cart.
|
||||||
|
|
||||||
|
### Scenario 2: Sample Packs
|
||||||
|
Create fixed sample packs with no custom quantities.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Starter Pack: 10 items
|
||||||
|
- Trial Pack: 25 items
|
||||||
|
- Full Pack: 50 items
|
||||||
|
|
||||||
|
Quantity cannot be changed in cart - customers must return to product page to select a different package.
|
||||||
|
|
||||||
|
### Scenario 3: Promotional Bundles
|
||||||
|
Offer promotional pricing only for specific bundle sizes with no modifications allowed.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
- Holiday Bundle: 12 units (seasonal pricing)
|
||||||
|
- Party Pack: 24 units (bulk discount)
|
||||||
|
- Wholesale Bundle: 100 units (wholesale pricing)
|
||||||
|
|
||||||
|
## Modified Files in 1.1.1
|
||||||
|
|
||||||
|
### Core Files Updated
|
||||||
|
- `wc-tier-and-package-prices.php` - Version updated to 1.1.1
|
||||||
|
- `composer.json` - Version updated to 1.1.1
|
||||||
|
- `CHANGELOG.md` - Added v1.1.1 section
|
||||||
|
|
||||||
|
### PHP Classes Modified
|
||||||
|
- `includes/class-wc-tpp-cart.php` - Added `maybe_hide_cart_quantity_input()` method
|
||||||
|
|
||||||
|
### Translation Files Updated
|
||||||
|
- `languages/wc-tier-package-prices.pot` - Version updated to 1.1.1
|
||||||
|
- `languages/wc-tier-package-prices-en_US.po` - Version updated to 1.1.1
|
||||||
|
- `languages/wc-tier-package-prices-de_DE.po` - Version updated to 1.1.1
|
||||||
|
- `languages/wc-tier-package-prices-de_CH_informal.po` - Version updated to 1.1.1
|
||||||
|
|
||||||
|
## Complete Feature Set
|
||||||
|
|
||||||
|
### Tier Pricing
|
||||||
|
- ✅ Quantity-based discount tiers
|
||||||
|
- ✅ Automatic price calculation
|
||||||
|
- ✅ Volume discount display
|
||||||
|
|
||||||
|
### Package Pricing
|
||||||
|
- ✅ Fixed-price bundles
|
||||||
|
- ✅ Custom package labels
|
||||||
|
- ✅ Multiple package options per product
|
||||||
|
- ✅ Quantity restriction to packages only (v1.1.0)
|
||||||
|
- ✅ Cart quantity enforcement (v1.1.1 - NEW)
|
||||||
|
|
||||||
|
### Admin Features
|
||||||
|
- ✅ WooCommerce Settings integration
|
||||||
|
- ✅ Easy-to-use product meta boxes
|
||||||
|
- ✅ Configurable display positions
|
||||||
|
- ✅ Native WooCommerce UI
|
||||||
|
- ✅ Global restriction setting
|
||||||
|
- ✅ Per-product restriction override
|
||||||
|
|
||||||
|
### Frontend Features
|
||||||
|
- ✅ Beautiful pricing tables (Twig templates)
|
||||||
|
- ✅ Real-time cart updates
|
||||||
|
- ✅ Responsive design
|
||||||
|
- ✅ 3 languages supported
|
||||||
|
- ✅ Package-only selection mode
|
||||||
|
- ✅ Automatic quantity field hiding (product page & cart)
|
||||||
|
- ✅ Visual package selection
|
||||||
|
- ✅ Read-only cart quantity display (NEW)
|
||||||
|
|
||||||
|
### Validation & Security
|
||||||
|
- ✅ Client-side JavaScript validation
|
||||||
|
- ✅ Server-side cart validation
|
||||||
|
- ✅ Cart quantity bypass prevention (NEW)
|
||||||
|
- ✅ User-friendly error messages
|
||||||
|
- ✅ WooCommerce HPOS compatible
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
|
||||||
|
**None.** This release is fully backward compatible with v1.1.0 and v1.0.x.
|
||||||
|
|
||||||
|
## Migration Notes
|
||||||
|
|
||||||
|
### From 1.1.0
|
||||||
|
- No migration needed
|
||||||
|
- Cart quantity hiding is automatic when restrictions are enabled
|
||||||
|
- No new settings or configuration required
|
||||||
|
|
||||||
|
### From 1.0.x
|
||||||
|
- All v1.1.0 features included plus cart enhancement
|
||||||
|
- New restriction features are disabled by default
|
||||||
|
- Must be explicitly enabled in settings
|
||||||
|
|
||||||
|
### Settings Location
|
||||||
|
All settings remain in: **WooCommerce > Settings > Tier & Package Prices**
|
||||||
|
|
||||||
|
### Data Preservation
|
||||||
|
- All existing tier pricing data preserved
|
||||||
|
- All existing package pricing data preserved
|
||||||
|
- All product meta data preserved
|
||||||
|
- No database changes required
|
||||||
|
|
||||||
|
## Known Limitations
|
||||||
|
|
||||||
|
### Current Version
|
||||||
|
1. Restriction only works when packages are defined
|
||||||
|
2. Cannot restrict to tier quantities (only packages)
|
||||||
|
3. Restriction applies to entire product (no variation-level control)
|
||||||
|
4. Cart quantity is read-only text (not a dropdown of package options)
|
||||||
|
|
||||||
|
### Future Enhancements
|
||||||
|
These features may be added in future versions:
|
||||||
|
- Cart package quantity dropdown selector
|
||||||
|
- Variation-level restriction control
|
||||||
|
- Restrict to tier quantities option
|
||||||
|
- Minimum/maximum package selection limits
|
||||||
|
|
||||||
|
## Changelog Summary
|
||||||
|
|
||||||
|
### Version History
|
||||||
|
- **v1.1.1** (2025-12-21) - Cart quantity bypass fix
|
||||||
|
- **v1.1.0** (2025-12-21) - Package quantity restriction feature
|
||||||
|
- **v1.0.2** (2025-12-21) - WooCommerce Settings integration
|
||||||
|
- **v1.0.1** (2025-12-21) - Twig template engine integration
|
||||||
|
- **v1.0.0** (2025-12-21) - Initial release
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- **Documentation:** See README.md and CHANGELOG.md
|
||||||
|
- **Previous Release:** See RELEASE-INFO-1.1.0.md
|
||||||
|
- **Issues:** https://src.bundespruefstelle.ch/wc-tier-package-prices/issues
|
||||||
|
- **Author:** Marco Graetsch
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
GPL v2 or later - https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Production Ready:** This package includes optimized autoloader and no development dependencies.
|
||||||
|
|
||||||
|
**Recommended Update:** Version 1.1.1 is recommended for all users of v1.1.0 to ensure complete package restriction enforcement. Users on v1.0.x can safely upgrade to gain both the restriction feature and this security enhancement.
|
||||||
BIN
releases/wc-tier-and-package-prices-1.0.2.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.0.2.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.0.2.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.0.2.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
830f443ce4b65e2ca9cfede3257bc4f5 wc-tier-and-package-prices-1.0.2.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.0.2.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.0.2.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
c1a5339da10b3625156b8fff4ec848e4a1318d6edc497bd5026cfe0a3ef39daa wc-tier-and-package-prices-1.0.2.zip
|
||||||
BIN
releases/wc-tier-and-package-prices-1.1.0.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.0.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.0.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.0.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ef68125c54b0c10f04ba82d48a98b4aa wc-tier-and-package-prices-1.1.0.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.0.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.0.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
da6b462f3dc297b282ed0da258b78fd9f2f82f3e76289c4c8fadd1ac9e02c55b wc-tier-and-package-prices-1.1.0.zip
|
||||||
BIN
releases/wc-tier-and-package-prices-1.1.1.zip
Normal file
BIN
releases/wc-tier-and-package-prices-1.1.1.zip
Normal file
Binary file not shown.
1
releases/wc-tier-and-package-prices-1.1.1.zip.md5
Normal file
1
releases/wc-tier-and-package-prices-1.1.1.zip.md5
Normal file
@@ -0,0 +1 @@
|
|||||||
|
51c4f8a7c3ccede2d2005f2fe3ebe44e wc-tier-and-package-prices-1.1.1.zip
|
||||||
1
releases/wc-tier-and-package-prices-1.1.1.zip.sha256
Normal file
1
releases/wc-tier-and-package-prices-1.1.1.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
b951f8b7ddd2bad6b3415d4583709fdf88f66aea4eae70110c903757ff53e045 wc-tier-and-package-prices-1.1.1.zip
|
||||||
@@ -3,13 +3,17 @@
|
|||||||
#
|
#
|
||||||
# @package WC_Tier_Package_Prices
|
# @package WC_Tier_Package_Prices
|
||||||
# @var array packages
|
# @var array packages
|
||||||
|
# @var bool restrict_to_packages
|
||||||
#}
|
#}
|
||||||
<div class="wc-tpp-package-pricing-table">
|
<div class="wc-tpp-package-pricing-table{% if restrict_to_packages %} wc-tpp-restricted-mode{% endif %}">
|
||||||
<h3>{{ 'Package Deals'|__('wc-tier-package-prices') }}</h3>
|
<h3>{{ 'Package Deals'|__('wc-tier-package-prices') }}</h3>
|
||||||
|
{% if restrict_to_packages %}
|
||||||
|
<p class="wc-tpp-restriction-notice">{{ 'Choose a package size below'|__('wc-tier-package-prices') }}</p>
|
||||||
|
{% endif %}
|
||||||
<div class="wc-tpp-packages">
|
<div class="wc-tpp-packages">
|
||||||
{% for index, package in packages %}
|
{% for index, package in packages %}
|
||||||
{% set price_per_unit = package.qty > 0 ? package.price / package.qty : 0 %}
|
{% set price_per_unit = package.qty > 0 ? package.price / package.qty : 0 %}
|
||||||
<div class="wc-tpp-package" data-qty="{{ package.qty|esc_attr }}" data-price="{{ package.price|esc_attr }}">
|
<div class="wc-tpp-package{% if restrict_to_packages %} wc-tpp-package-selectable{% endif %}" data-qty="{{ package.qty|esc_attr }}" data-price="{{ package.price|esc_attr }}">
|
||||||
<div class="wc-tpp-package-header">
|
<div class="wc-tpp-package-header">
|
||||||
{% if package.label is not empty %}
|
{% if package.label is not empty %}
|
||||||
<h4>{{ package.label|esc_html }}</h4>
|
<h4>{{ package.label|esc_html }}</h4>
|
||||||
|
|||||||
@@ -12,6 +12,6 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if packages is not empty and get_option('wc_tpp_enable_package_pricing') == 'yes' %}
|
{% if packages is not empty and get_option('wc_tpp_enable_package_pricing') == 'yes' %}
|
||||||
{% include 'frontend/package-pricing-display.twig' with {'packages': packages} %}
|
{% include 'frontend/package-pricing-display.twig' with {'packages': packages, 'restrict_to_packages': restrict_to_packages|default(false)} %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* Plugin Name: WooCommerce Tier and Package Prices
|
* Plugin Name: WooCommerce Tier and Package Prices
|
||||||
* Plugin URI: https://src.bundespruefstelle.ch/wc-tier-package-prices
|
* Plugin URI: https://src.bundespruefstelle.ch/wc-tier-package-prices
|
||||||
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
||||||
* Version: 1.0.2
|
* Version: 1.1.2
|
||||||
* Author: Marco Graetsch
|
* Author: Marco Graetsch
|
||||||
* Author URI: https://src.bundespruefstelle.ch/magdev
|
* Author URI: https://src.bundespruefstelle.ch/magdev
|
||||||
* Text Domain: wc-tier-package-prices
|
* Text Domain: wc-tier-package-prices
|
||||||
@@ -22,7 +22,7 @@ if (!defined('ABSPATH')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Define plugin constants
|
// Define plugin constants
|
||||||
define('WC_TPP_VERSION', '1.0.2');
|
define('WC_TPP_VERSION', '1.1.2');
|
||||||
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||||
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
|
define('WC_TPP_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||||||
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
define('WC_TPP_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
||||||
|
|||||||
Reference in New Issue
Block a user