{"id":336234,"date":"2026-07-14T13:13:46","date_gmt":"2026-07-14T13:13:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bonus-prices-jjk\/"},"modified":"2026-07-14T13:13:33","modified_gmt":"2026-07-14T13:13:33","slug":"jyri363-bonus-pricing","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/jyri363-bonus-pricing\/","author":14420193,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4.27","stable_tag":"0.4.27","tested":"7.0.1","requires":"6.2","requires_php":"7.3","requires_plugins":null,"header_name":"jyri363 Bonus Pricing","header_author":"J\u00fcri-Joonas Kerem","header_description":"Product-based quantity pricing, live product-page pricing, loyalty discounts, cart discount tiers, and translation-ready custom strings for stores using the required shop plugin.","assets_banners_color":"d9d6f9","last_updated":"2026-07-14 13:13:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.27":{"tag":"0.4.27","author":"jyri363","date":"2026-07-14 13:13:33"}},"upgrade_notice":{"0.4.20":"<p>Adds a global table-position setting and defaults the product quantity table below the add-to-cart form.<\/p>","0.4.13":"<p>Recommended public-branch cleanup release for WordPress.org preparation, translation hygiene, and branch separation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3607508,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3607508,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x478.PNG":{"filename":"banner-1544x478.PNG","revision":3607508,"resolution":"1544x478","location":"assets","locale":"","width":1544,"height":478},"banner-794x246.PNG":{"filename":"banner-794x246.PNG","revision":3607508,"resolution":"794x246","location":"assets","locale":"","width":794,"height":246}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4.27"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Product data tab with quantity pricing rules.","2":"Loyalty settings screen under WooCommerce.","3":"Quantity pricing table on the product page.","4":"Live unit price feedback on the frontend."}},"plugin_section":[],"plugin_tags":[6744,282,3377,249264,166977],"plugin_category":[45],"plugin_contributors":[271494],"plugin_business_model":[],"class_list":["post-336234","plugin","type-plugin","status-publish","hentry","plugin_tags-discounts","plugin_tags-ecommerce","plugin_tags-loyalty","plugin_tags-quantity-pricing","plugin_tags-tiered-pricing","plugin_category-ecommerce","plugin_contributors-jyri363","plugin_committers-jyri363"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jyri363-bonus-pricing\/assets\/icon-128x128.png?rev=3607508","icon_2x":"https:\/\/ps.w.org\/jyri363-bonus-pricing\/assets\/icon-256x256.png?rev=3607508","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>jyri363 Bonus Pricing adds two kinds of pricing logic to WooCommerce:<\/p>\n\n<ul>\n<li>product-level quantity pricing<\/li>\n<li>loyalty pricing based on the customer spending history<\/li>\n<li>optional cart subtotal discount tiers<\/li>\n<li>live unit-price feedback on the product page<\/li>\n<li>support for simple products and variable products with variation-level quantity rules<\/li>\n<li>WPML-ready custom strings for frontend labels<\/li>\n<\/ul>\n\n<p>Typical use cases:<\/p>\n\n<ul>\n<li>100\u2013299 pcs = one unit price, 300+ pcs = another unit price<\/li>\n<li>a repeat customer gets an automatic loyalty discount<\/li>\n<li>an extra discount is shown and applied when the cart subtotal reaches a target amount<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the ZIP from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Open a product in WooCommerce and use the new <strong>Pricing logic<\/strong> tab inside <strong>Product data<\/strong>.<\/li>\n<li>Configure loyalty settings under <strong>WooCommerce \u2192 Bonus Prices<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20variable%20products%3F\"><h3>Does this work with variable products?<\/h3><\/dt>\n<dd><p>Yes. Parent-level quantity rules can act as fallback rules, and each variation can also use its own quantity pricing rules.<\/p><\/dd>\n<dt id=\"has%20it%20been%20tested%20with%20php%208.1%3F\"><h3>Has it been tested with PHP 8.1?<\/h3><\/dt>\n<dd><p>Yes. Version 0.4.20 records PHP 8.1 as manually tested. The declared minimum PHP version remains 7.3 for broader hosting compatibility.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20remove%20its%20data%20on%20uninstall%3F\"><h3>Does the plugin remove its data on uninstall?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes an <code>uninstall.php<\/code> file that removes its options, post meta, order-item meta, and transient cache entries when the plugin is deleted from WordPress.<\/p><\/dd>\n<dt id=\"is%20wpml%20required%3F\"><h3>Is WPML required?<\/h3><\/dt>\n<dd><p>No. WPML integration is optional. The plugin works without WPML.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.4.27<\/h4>\n\n<ul>\n<li>Updated all internal function, class, constant, option, shortcode, script and CSS prefixes to use the unique jyri363bp prefix.<\/li>\n<li>Renamed the cart discount shortcode to jyri363bp_cart_discount_note.<\/li>\n<\/ul>\n\n<h4>0.4.26<\/h4>\n\n<ul>\n<li>Renamed the plugin to jyri363 Bonus Pricing and changed the slug to jyri363-bonus-pricing for clearer ownership and distinctiveness.<\/li>\n<li>Updated contributors to match the submitting WordPress.org account.<\/li>\n<li>Removed the external Plugin URI\/Donate link from the package.<\/li>\n<\/ul>\n\n<h4>0.4.25<\/h4>\n\n<ul>\n<li>Renamed the plugin to jyri363 Bonus Pricing to comply with WordPress.org trademark and permalink restrictions.<\/li>\n<li>Updated slug, main plugin file name, text domain, and language file names.<\/li>\n<\/ul>\n\n<h4>0.4.24<\/h4>\n\n<ul>\n<li>Renamed the public plugin title to jyri363 Bonus Pricing for WordPress.org naming compatibility.<\/li>\n<li>Updated the plugin folder, main file and text domain to jyri363-bonus-pricing.<\/li>\n<li>Removed manual load_plugin_textdomain usage to follow current WordPress.org translation handling.<\/li>\n<\/ul>\n\n<h4>0.4.23<\/h4>\n\n<ul>\n<li>Updated Tested up to to WordPress 7.0 for Plugin Check compatibility.<\/li>\n<li>Removed the manual load_plugin_textdomain call because WordPress loads plugin translations automatically since WordPress 4.6.<\/li>\n<\/ul>\n\n<h4>0.4.22<\/h4>\n\n<ul>\n<li>Fixed remaining Plugin Check errors for missing translator comments.<\/li>\n<li>Escaped cart\/order discount note output with wp_kses_post().<\/li>\n<\/ul>\n\n<h4>0.4.21<\/h4>\n\n<ul>\n<li>Hardened admin escaping and sanitization in a few product and table-rendering paths.<\/li>\n<li>Added translator comments for placeholder strings.<\/li>\n<li>Reduced Plugin Check warnings around uninstall cleanup and product-meta saving.<\/li>\n<\/ul>\n\n<h4>0.4.20<\/h4>\n\n<ul>\n<li>Added a global quantity table position setting under WooCommerce \u2192 Bonus Prices \u2192 Frontend behaviour.<\/li>\n<li>Changed the default quantity table position to below the add-to-cart form.<\/li>\n<li>Added product-meta nonce and capability checks for a cleaner WordPress.org pre-submit pass.<\/li>\n<li>Added a PHP 8.1 tested note while keeping the declared minimum PHP version at 7.3.<\/li>\n<\/ul>\n\n<h4>0.4.19<\/h4>\n\n<ul>\n<li>Small WordPress.org pre-submit cleanup release.<\/li>\n<li>Bumped package version to 0.4.19.<\/li>\n<\/ul>\n\n<h4>0.4.18<\/h4>\n\n<ul>\n<li>Lowered the declared minimum PHP version to 7.3 after compatibility audit.<\/li>\n<li>Reworked frontend and admin JavaScript for older browser compatibility by removing const\/let and NodeList.forEach dependencies.<\/li>\n<li>Fixed quantity pricing active-tier rendering so it works consistently when live JS pricing is enabled, even if plugin CSS is disabled.<\/li>\n<li>Renamed the localized product-page JS object to jyri363bpProductPage for cleaner plugin branding.<\/li>\n<\/ul>\n\n<h4>0.4.16<\/h4>\n\n<ul>\n<li>Renamed the public plugin title to jyri363 Bonus Pricing for clearer WooCommerce positioning.<\/li>\n<\/ul>\n\n<h4>0.4.13<\/h4>\n\n<ul>\n<li>Removed all remaining legacy compatibility references from the public branch.<\/li>\n<li>Replaced custom admin translation helper calls with standard WordPress translation functions.<\/li>\n<li>Moved Estonian and Finnish translations out of source code and into language files.<\/li>\n<li>Cleaned helper and class filenames to use the plugin prefix consistently.<\/li>\n<\/ul>\n\n<h4>0.4.12<\/h4>\n\n<ul>\n<li>Added <code>uninstall.php<\/code> cleanup routine.<\/li>\n<li>Added WordPress.org format <code>readme.txt<\/code>.<\/li>\n<li>Added GPL license file.<\/li>\n<li>Added textdomain loading and a starter POT file.<\/li>\n<li>Replaced <code>current_time( 'timestamp' )<\/code> usage in loyalty calculations.<\/li>\n<li>Added transient caching for loyalty spend and loyalty rate calculations.<\/li>\n<li>Split the large helper file into smaller helper modules.<\/li>\n<\/ul>\n\n<h4>0.4.11<\/h4>\n\n<ul>\n<li>Initial renamed package cleanup and branding refresh.<\/li>\n<\/ul>","raw_excerpt":"Flexible quantity pricing and loyalty discounts for WooCommerce, with simple and variable product support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/336234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=336234"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jyri363"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=336234"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=336234"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=336234"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=336234"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=336234"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=336234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}