Changeset 3486551
- Timestamp:
- 03/19/2026 02:09:41 PM (2 weeks ago)
- Location:
- wpc-price-by-quantity
- Files:
-
- 49 added
- 11 edited
-
tags/5.3.9 (added)
-
tags/5.3.9/assets (added)
-
tags/5.3.9/assets/css (added)
-
tags/5.3.9/assets/css/backend.css (added)
-
tags/5.3.9/assets/css/backend.css.map (added)
-
tags/5.3.9/assets/css/backend.scss (added)
-
tags/5.3.9/assets/css/frontend.css (added)
-
tags/5.3.9/assets/css/frontend.css.map (added)
-
tags/5.3.9/assets/css/frontend.scss (added)
-
tags/5.3.9/assets/css/hint.css (added)
-
tags/5.3.9/assets/js (added)
-
tags/5.3.9/assets/js/backend.js (added)
-
tags/5.3.9/assets/js/frontend.js (added)
-
tags/5.3.9/includes (added)
-
tags/5.3.9/includes/class-backend.php (added)
-
tags/5.3.9/includes/class-cart.php (added)
-
tags/5.3.9/includes/class-frontend.php (added)
-
tags/5.3.9/includes/class-helper.php (added)
-
tags/5.3.9/includes/dashboard (added)
-
tags/5.3.9/includes/dashboard/css (added)
-
tags/5.3.9/includes/dashboard/css/dashboard.css (added)
-
tags/5.3.9/includes/dashboard/css/dashboard.css.map (added)
-
tags/5.3.9/includes/dashboard/css/dashboard.scss (added)
-
tags/5.3.9/includes/dashboard/images (added)
-
tags/5.3.9/includes/dashboard/images/wpc-icon.svg (added)
-
tags/5.3.9/includes/dashboard/js (added)
-
tags/5.3.9/includes/dashboard/js/backend.js (added)
-
tags/5.3.9/includes/dashboard/wpc-dashboard.php (added)
-
tags/5.3.9/includes/hpos.php (added)
-
tags/5.3.9/includes/kit (added)
-
tags/5.3.9/includes/kit/css (added)
-
tags/5.3.9/includes/kit/css/backend.css (added)
-
tags/5.3.9/includes/kit/js (added)
-
tags/5.3.9/includes/kit/js/backend.js (added)
-
tags/5.3.9/includes/kit/wpc-kit.php (added)
-
tags/5.3.9/includes/log (added)
-
tags/5.3.9/includes/log/wpc-log.php (added)
-
tags/5.3.9/includes/templates (added)
-
tags/5.3.9/includes/templates/add-new.php (added)
-
tags/5.3.9/includes/templates/role-price.php (added)
-
tags/5.3.9/index.php (added)
-
tags/5.3.9/languages (added)
-
tags/5.3.9/languages/wpc-price-by-quantity-nl_NL.mo (added)
-
tags/5.3.9/languages/wpc-price-by-quantity-nl_NL.po (added)
-
tags/5.3.9/languages/wpc-price-by-quantity.pot (added)
-
tags/5.3.9/readme.txt (added)
-
tags/5.3.9/wpc-price-by-quantity.php (added)
-
trunk/includes/class-backend.php (modified) (6 diffs)
-
trunk/includes/class-frontend.php (modified) (5 diffs)
-
trunk/includes/class-helper.php (modified) (1 diff)
-
trunk/includes/dashboard/css/dashboard.css (modified) (3 diffs)
-
trunk/includes/dashboard/css/dashboard.css.map (modified) (1 diff)
-
trunk/includes/dashboard/css/dashboard.scss (modified) (3 diffs)
-
trunk/includes/dashboard/wpc-dashboard.php (modified) (3 diffs)
-
trunk/includes/log (added)
-
trunk/includes/log/wpc-log.php (added)
-
trunk/includes/templates/role-price.php (modified) (6 diffs)
-
trunk/languages/wpc-price-by-quantity.pot (modified) (4 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/wpc-price-by-quantity.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wpc-price-by-quantity/trunk/includes/class-backend.php
r3443064 r3486551 20 20 // Settings 21 21 add_action( 'admin_init', [ $this, 'register_settings' ] ); 22 add_filter( 'pre_update_option', [ $this, 'last_saved' ], 10, 2 ); 22 23 add_action( 'admin_menu', [ $this, 'admin_menu' ] ); 23 24 … … 221 222 'sanitize_callback' => [ 'Wpcpq_Helper', 'sanitize_array' ], 222 223 ] ); 224 } 225 226 function last_saved( $value, $option ) { 227 if ( $option == 'wpcpq_settings' || $option == 'wpcpq_localization' ) { 228 $value['_last_saved'] = current_time( 'timestamp' ); 229 $value['_last_saved_by'] = get_current_user_id(); 230 } 231 232 return $value; 223 233 } 224 234 … … 442 452 <tr class="submit"> 443 453 <th colspan="2"> 444 <?php settings_fields( 'wpcpq_settings' ); ?><?php submit_button(); ?> 454 <div class="wpclever_submit"> 455 <?php 456 settings_fields( 'wpcpq_settings' ); 457 submit_button( '', 'primary', 'submit', false ); 458 459 if ( function_exists( 'wpc_last_saved' ) ) { 460 wpc_last_saved( Wpcpq_Helper()::get_settings() ); 461 } 462 ?> 463 </div> 445 464 <a style="display: none;" class="wpclever_export" 446 465 data-key="wpcpq_settings" … … 585 604 <tr class="submit"> 586 605 <th colspan="2"> 587 <?php settings_fields( 'wpcpq_localization' ); ?><?php submit_button(); ?> 606 <div class="wpclever_submit"> 607 <?php 608 settings_fields( 'wpcpq_localization' ); 609 submit_button( '', 'primary', 'submit', false ); 610 611 if ( function_exists( 'wpc_last_saved' ) ) { 612 wpc_last_saved( get_option( 'wpcpq_localization', [] ) ); 613 } 614 ?> 615 </div> 588 616 <a style="display: none;" class="wpclever_export" 589 617 data-key="wpcpq_localization" … … 665 693 } 666 694 667 publicfunction ajax_add_role_price() {695 function ajax_add_role_price() { 668 696 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'wpcpq-security' ) ) { 669 697 die( 'Permissions check failed!' ); … … 689 717 690 718 if ( ! empty( $role ) ) { 691 $key = $role;719 $key = Wpcpq_Helper()::generate_key(); 692 720 $active = true; 693 721 $price = [ 722 'role' => $role, 694 723 'apply' => $apply, 695 724 'apply_val' => $apply_val, -
wpc-price-by-quantity/trunk/includes/class-frontend.php
r3424526 r3486551 198 198 <div class="wpcpq-item-price"> 199 199 <?php 200 $tier_price = wc_get_price_to_display( $product, [ 'price' => $product_price ] ); 201 echo wp_kses_post( apply_filters( 'wpcpq_item_price_default', apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $tier_price, 'default' ) . '</span>', [], $product, $tier_price ), $tiers, $product, $tier_price ) ); 200 echo wp_kses_post( apply_filters( 'wpcpq_item_price_default', apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $product_price, 'default' ) . '</span>', [], $product, $product_price ), $tiers, $product, $product_price ) ); 202 201 ?> 203 202 </div> … … 277 276 278 277 // item price 279 $tier_price = wc_get_price_to_display( $product, [ 'price' => Wpcpq_Helper()::calculate_price( $item_price, $product_price ), ]);278 $tier_price = Wpcpq_Helper()::calculate_price( $item_price, $product_price ); 280 279 echo '<div class="wpcpq-item-price">' . wp_kses_post( apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $tier_price ) . '</span>', $tier, $product, $tier_price ) ); 281 280 … … 357 356 <?php 358 357 // item price 359 $tier_price = wc_get_price_to_display( $product, [ 'price' => Wpcpq_Helper()::calculate_price( $item_price, $product_price ), ]);358 $tier_price = Wpcpq_Helper()::calculate_price( $item_price, $product_price ); 360 359 echo '<div class="wpcpq-item-price">' . wp_kses_post( apply_filters( 'wpcpq_item_price', sprintf( Wpcpq_Helper()::localization( 'qb_item_price', /* translators: price */ esc_html__( '%s for each product', 'wpc-price-by-quantity' ) ), '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $tier_price ) . '</span>' ), $tier, $product, $tier_price ) ) . '</div>'; 361 360 … … 404 403 <div class="wpcpq-item-price"> 405 404 <?php 406 $tier_price = wc_get_price_to_display( $product, [ 'price' => $product_price ] ); 407 echo wp_kses_post( apply_filters( 'wpcpq_item_price_default', apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $tier_price ) . '</span>', [], $product, $tier_price ), $tiers, $product, $tier_price ) ); 405 echo wp_kses_post( apply_filters( 'wpcpq_item_price_default', apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $product_price ) . '</span>', [], $product, $product_price ), $tiers, $product, $product_price ) ); 408 406 ?> 409 407 </div> … … 484 482 <?php 485 483 // item price 486 $tier_price = wc_get_price_to_display( $product, [ 'price' => Wpcpq_Helper()::calculate_price( $item_price, $product_price ), ]);484 $tier_price = Wpcpq_Helper()::calculate_price( $item_price, $product_price ); 487 485 echo '<div class="wpcpq-item-price">' . wp_kses_post( apply_filters( 'wpcpq_item_price', '<span class="wpcpq-item-price-val">' . Wpcpq_Helper()::display_price( $tier_price ) . '</span>', $tier, $product, $tier_price ) ); 488 486 -
wpc-price-by-quantity/trunk/includes/class-helper.php
r3443064 r3486551 182 182 } 183 183 184 $role = $price['role'] ?? 'wpcpq_all'; 184 185 $apply = ! empty( $price['apply'] ) ? $price['apply'] : 'all'; 185 186 $apply_val = ! empty( $price['apply_val'] ) ? explode( ',', $price['apply_val'] ) : []; 186 187 if ( ! empty( $price['role'] ) ) {188 $role = $price['role'];189 } else {190 if ( ! str_contains( $key, '**' ) ) {191 $role = $key;192 } else {193 $key_arr = explode( '**', $key );194 $role = ! empty( $key_arr[1] ) ? $key_arr[1] : 'all';195 }196 }197 187 198 188 // check role -
wpc-price-by-quantity/trunk/includes/dashboard/css/dashboard.css
r3387392 r3486551 287 287 } 288 288 289 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_submit { 290 display: flex; 291 align-items: center; 292 } 293 294 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpc-last-saved { 295 font-weight: 400; 296 font-size: 12px; 297 color: #999; 298 margin-left: 10px; 299 display: flex; 300 align-items: center; 301 } 302 303 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpc-last-saved .dashicons { 304 font-size: 15px; 305 width: 15px; 306 height: 15px; 307 margin-right: 5px; 308 color: #22c55e; 309 } 310 289 311 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_export { 290 312 position: absolute; … … 293 315 transform: translateY(-50%); 294 316 font-weight: 400; 317 } 318 319 #wpclever_export .wpclever_export_data { 320 width: 100%; 321 font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; 322 font-size: 12.5px; 323 line-height: 20px; 324 padding: 0 12px; 325 background-image: repeating-linear-gradient(to bottom, #ffffff 0px, #ffffff 20px, #fafafa 20px, #fafafa 40px); 326 background-attachment: local; 327 resize: vertical; 328 box-sizing: border-box; 329 outline: none; 295 330 } 296 331 … … 462 497 border-left: none; 463 498 border-right: 4px solid #23282d; 499 } 500 501 body.rtl .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_export { 502 left: 20px; 503 right: auto; 464 504 } 465 505 -
wpc-price-by-quantity/trunk/includes/dashboard/css/dashboard.css.map
r3387392 r3486551 1 {"version":3,"sourceRoot":"","sources":["dashboard.scss"],"names":[],"mappings":";AAAA;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;IACE;IACA;IACA;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA; EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA","file":"dashboard.css"}1 {"version":3,"sourceRoot":"","sources":["dashboard.scss"],"names":[],"mappings":";AAAA;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;IACE;IACA;IACA;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAOA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA","file":"dashboard.css"} -
wpc-price-by-quantity/trunk/includes/dashboard/css/dashboard.scss
r3387392 r3486551 299 299 } 300 300 301 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_submit { 302 display: flex; 303 align-items: center; 304 } 305 306 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpc-last-saved { 307 font-weight: 400; 308 font-size: 12px; 309 color: #999; 310 margin-left: 10px; 311 display: flex; 312 align-items: center; 313 } 314 315 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpc-last-saved .dashicons { 316 font-size: 15px; 317 width: 15px; 318 height: 15px; 319 margin-right: 5px; 320 color: #22c55e; 321 } 322 301 323 .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_export { 302 324 position: absolute; … … 305 327 transform: translateY(-50%); 306 328 font-weight: 400; 329 } 330 331 #wpclever_export .wpclever_export_data { 332 width: 100%; 333 font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; 334 font-size: 12.5px; 335 line-height: 20px; 336 padding: 0 12px; 337 background-image: repeating-linear-gradient( 338 to bottom, 339 #ffffff 0px, 340 #ffffff 20px, 341 #fafafa 20px, 342 #fafafa 40px 343 ); 344 background-attachment: local; 345 resize: vertical; 346 box-sizing: border-box; 347 outline: none; 307 348 } 308 349 … … 478 519 border-left: none; 479 520 border-right: 4px solid #23282d; 521 } 522 523 body.rtl .wpclever_settings_page .wpclever_settings_page_content table tr.submit .wpclever_export { 524 left: 20px; 525 right: auto; 480 526 } 481 527 -
wpc-price-by-quantity/trunk/includes/dashboard/wpc-dashboard.php
r3387392 r3486551 1 1 <?php 2 2 defined( 'ABSPATH' ) || exit; 3 4 if ( ! class_exists( 'WPCleverMenu' ) ) {5 class WPCleverMenu {6 function __construct() {7 // do nothing, moved to WPCleverDashboard8 }9 }10 11 new WPCleverMenu();12 }13 3 14 4 if ( ! class_exists( 'WPCleverDashboard' ) ) { … … 232 222 233 223 if ( ! empty( $key ) && ( $settings = get_option( $key ) ) ) { 224 unset( $settings['_last_saved'] ); 225 unset( $settings['_last_saved_by'] ); 226 234 227 echo '<textarea class="wpclever_export_data" id="wpclever_export_data" style="width: 100%; height: 200px; margin-bottom: 10px;" data-key="' . esc_attr( $key ) . '">' . esc_textarea( wp_json_encode( $settings, JSON_PRETTY_PRINT ) ) . '</textarea>'; 235 228 echo '<div style="display: flex; align-items: center"><button class="button button-primary wpclever_import" data-key="' . esc_attr( $key ) . '">Update</button>'; … … 265 258 new WPCleverDashboard(); 266 259 } 260 261 if ( ! function_exists( 'wpc_last_saved' ) ) { 262 function wpc_last_saved( $settings ) { 263 $last_saved = isset( $settings['_last_saved'] ) ? (int) $settings['_last_saved'] : 0; 264 265 if ( $last_saved ) { 266 $time_diff = human_time_diff( $last_saved, current_time( 'timestamp' ) ); 267 $time_full = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $last_saved ); 268 269 // Who saved it 270 $saved_by_id = isset( $settings['_last_saved_by'] ) ? (int) $settings['_last_saved_by'] : 0; 271 $saved_by_name = ''; 272 273 if ( $saved_by_id ) { 274 $user = get_userdata( $saved_by_id ); 275 276 if ( $user ) { 277 $saved_by_name = $user->display_name; 278 } 279 } 280 281 $by_text = $saved_by_name ? ' ' . sprintf( 'by %s', esc_html( $saved_by_name ) ) : ''; 282 283 echo '<span class="wpc-last-saved" title="' . esc_attr( $time_full ) . '"><span class="dashicons dashicons-saved"></span> ' 284 . sprintf( 285 'Saved %1$s ago', 286 esc_html( $time_diff ) 287 ) 288 . $by_text 289 . '</span>'; 290 } 291 } 292 } -
wpc-price-by-quantity/trunk/includes/templates/role-price.php
r3324640 r3486551 11 11 defined( 'ABSPATH' ) || exit; 12 12 13 if ( ! str_contains( $key, '**' ) ) {14 $role = $key;15 $key = Wpcpq_Helper()::generate_key() . '**' . $role;16 } else {17 $key_arr = explode( '**', $key );18 $role = ! empty( $key_arr[1] ) ? $key_arr[1] : 'all';19 }20 21 13 global $wp_roles; 22 14 15 $role = ! empty( $price['role'] ) ? $price['role'] : 'wpcpq_all'; 16 23 17 switch ( $role ) { 24 case 'all':25 case 'wpcpq_all':26 $role_name = esc_html__( 'All', 'wpc-price-by-quantity' );27 break;18 case 'all': 19 case 'wpcpq_all': 20 $role_name = esc_html__( 'All', 'wpc-price-by-quantity' ); 21 break; 28 22 29 case 'wpcpq_user':30 $role_name = esc_html__( 'User (logged in)', 'wpc-price-by-quantity' );31 break;23 case 'wpcpq_user': 24 $role_name = esc_html__( 'User (logged in)', 'wpc-price-by-quantity' ); 25 break; 32 26 33 case 'wpcpq_guest':34 $role_name = esc_html__( 'Guest (not logged in)', 'wpc-price-by-quantity' );35 break;27 case 'wpcpq_guest': 28 $role_name = esc_html__( 'Guest (not logged in)', 'wpc-price-by-quantity' ); 29 break; 36 30 37 default:38 $role_name = isset( $wp_roles->roles[ $role ] ) ? $wp_roles->roles[ $role ]['name'] : esc_html__( 'All', 'wpc-price-by-quantity' );31 default: 32 $role_name = isset( $wp_roles->roles[ $role ] ) ? $wp_roles->roles[ $role ]['name'] : esc_html__( 'All', 'wpc-price-by-quantity' ); 39 33 } 40 34 … … 44 38 $layout = ! empty( $price['layout'] ) ? $price['layout'] : 'default'; 45 39 $exclude_onsale = ! empty( $price['exclude_onsale'] ) ? $price['exclude_onsale'] : 'no'; 40 $class = 'wpcpq-item wpcpq-item-' . $key . ( $active ? ' active' : '' ); 46 41 ?> 47 <div class="<?php echo esc_attr( $ active ? 'wpcpq-item active' : 'wpcpq-item'); ?>">42 <div class="<?php echo esc_attr( $class ); ?>"> 48 43 <div class="wpcpq-item-header"> 49 44 <span class="wpcpq-item-move ui-sortable-handle"><?php esc_html_e( 'move', 'wpc-price-by-quantity' ); ?></span> … … 64 59 <option value="products" <?php selected( $apply, 'products' ); ?> 65 60 disabled><?php esc_attr_e( 'Selected products (Premium)', 'wpc-price-by-quantity' ); ?></option> 66 <?php67 $taxonomies = get_object_taxonomies( 'product', 'objects' );61 <?php 62 $taxonomies = get_object_taxonomies( 'product', 'objects' ); 68 63 69 foreach ( $taxonomies as $taxonomy ) {70 echo '<option value="' . esc_attr( $taxonomy->name ) . '" ' . selected( $apply, $taxonomy->name, false ) . '>' . esc_html( $taxonomy->label ) . '</option>';71 }72 ?>64 foreach ( $taxonomies as $taxonomy ) { 65 echo '<option value="' . esc_attr( $taxonomy->name ) . '" ' . selected( $apply, $taxonomy->name, false ) . '>' . esc_html( $taxonomy->label ) . '</option>'; 66 } 67 ?> 73 68 </select> <span><?php esc_html_e( 'Exclude on-sale products', 'wpc-price-by-quantity' ); ?> <input 74 69 type="checkbox" … … 80 75 name="<?php echo esc_attr( 'wpcpq_prices' . $name . '[' . $key . '][apply_val]' ); ?>" 81 76 type="hidden" value="<?php echo esc_attr( $apply_val ); ?>"/> 82 <?php if ( ! is_array( $apply_val ) ) {83 $apply_val = array_map( 'trim', explode( ',', $apply_val ) );84 } ?>77 <?php if ( ! is_array( $apply_val ) ) { 78 $apply_val = array_map( 'trim', explode( ',', $apply_val ) ); 79 } ?> 85 80 <select class="wpcpq_terms" multiple="multiple" 86 81 data-<?php echo esc_attr( $apply ); ?>="<?php echo esc_attr( implode( ',', $apply_val ) ); ?>"> 87 <?php if ( is_array( $apply_val ) && ! empty( $apply_val ) ) {88 foreach ( $apply_val as $t ) {89 if ( $term = get_term_by( 'slug', $t, $apply ) ) {90 echo '<option value="' . esc_attr( $t ) . '" selected>' . esc_html( $term->name ) . '</option>';91 }92 }93 } ?>82 <?php if ( is_array( $apply_val ) && ! empty( $apply_val ) ) { 83 foreach ( $apply_val as $t ) { 84 if ( $term = get_term_by( 'slug', $t, $apply ) ) { 85 echo '<option value="' . esc_attr( $t ) . '" selected>' . esc_html( $term->name ) . '</option>'; 86 } 87 } 88 } ?> 94 89 </select> 95 90 </div> … … 127 122 aria-label="<?php echo esc_attr( esc_html__( 'Set the price in numbers and the following characters: + / - / %. For example: +2: Increase the product price by 2 -5: Decrease the product price by 5 10: Set the new product price as 10 90%: Set the new product price as 90% of the original price.', 'wpc-price-by-quantity' ) ); ?>"><span 128 123 class="wpcpq-help-tip"></span></span> 129 <?php130 $count = 0;124 <?php 125 $count = 0; 131 126 132 if ( ! empty( $price['tiers'] ) && is_array( $price['tiers'] ) ) {133 foreach ( $price['tiers'] as $tier ) {134 $tier = array_merge( [ 'quantity' => '', 'price' => '', 'text' => '' ], $tier );135 $tier_price = Wpcpq_Helper()::clean_price( $tier['price'] );136 ?>127 if ( ! empty( $price['tiers'] ) && is_array( $price['tiers'] ) ) { 128 foreach ( $price['tiers'] as $tier ) { 129 $tier = array_merge( [ 'quantity' => '', 'price' => '', 'text' => '' ], $tier ); 130 $tier_price = Wpcpq_Helper()::clean_price( $tier['price'] ); 131 ?> 137 132 <div class="input-panel wpcpq-quantity"> 138 133 <span class="wpcpq-qty-wrapper hint--top" … … 158 153 aria-label="<?php esc_attr_e( 'remove', 'wpc-price-by-quantity' ); ?>">×</span> 159 154 </div> 160 <?php161 $count ++;162 }163 } ?>155 <?php 156 $count ++; 157 } 158 } ?> 164 159 <button class="button wpcpq-add-qty" type="button" 165 160 data-id="<?php echo esc_attr( $is_variation ? $product_id : 0 ); ?>" 166 161 data-key="<?php echo esc_attr( $key ); ?>" 167 162 data-count="<?php echo esc_attr( is_array( $price['tiers'] ) && ! empty( $price['tiers'] ) ? count( $price['tiers'] ) : 0 ); ?>"> 168 <?php esc_html_e( '+ New row', 'wpc-price-by-quantity' ); ?>163 <?php esc_html_e( '+ New row', 'wpc-price-by-quantity' ); ?> 169 164 </button> 170 165 </div> -
wpc-price-by-quantity/trunk/languages/wpc-price-by-quantity.pot
r3473223 r3486551 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: WPC Price by Quantity for WooCommerce 5.3. 8\n"5 "Project-Id-Version: WPC Price by Quantity for WooCommerce 5.3.9\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpc-price-by-quantity\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-03- 03T03:12:16+00:00\n"12 "POT-Creation-Date: 2026-03-19T14:08:17+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 40 40 msgstr "" 41 41 42 #: includes/class-backend.php:6 743 #: includes/class-backend.php:1 3944 #: includes/class-backend.php:7 5442 #: includes/class-backend.php:68 43 #: includes/class-backend.php:140 44 #: includes/class-backend.php:783 45 45 msgid "Price by Quantity" 46 46 msgstr "" 47 47 48 #: includes/class-backend.php:9 048 #: includes/class-backend.php:91 49 49 msgid "Product wasn't returned." 50 50 msgstr "" 51 51 52 #: includes/class-backend.php:10 353 #: includes/class-backend.php:2 4052 #: includes/class-backend.php:104 53 #: includes/class-backend.php:250 54 54 msgid "WPC Price by Quantity" 55 55 msgstr "" 56 56 57 #: includes/class-backend.php:14 157 #: includes/class-backend.php:142 58 58 msgid "Global" 59 59 msgstr "" 60 60 61 #: includes/class-backend.php:14 262 #: includes/class-backend.php:7 6861 #: includes/class-backend.php:143 62 #: includes/class-backend.php:797 63 63 msgid "Disable" 64 64 msgstr "" 65 65 66 #: includes/class-backend.php:14 466 #: includes/class-backend.php:145 67 67 msgid "Parent" 68 68 msgstr "" 69 69 70 #: includes/class-backend.php:14 671 #: includes/class-backend.php: 77270 #: includes/class-backend.php:147 71 #: includes/class-backend.php:801 72 72 msgid "Override" 73 73 msgstr "" 74 74 75 #: includes/class-backend.php:2 4075 #: includes/class-backend.php:250 76 76 msgid "Premium" 77 77 msgstr "" 78 78 79 79 #. translators: stars 80 #: includes/class-backend.php:2 4380 #: includes/class-backend.php:253 81 81 #, php-format 82 82 msgid "Thank you for using our plugin! If you are satisfied, please reward it a full five-star %s rating." 83 83 msgstr "" 84 84 85 #: includes/class-backend.php:2 4685 #: includes/class-backend.php:256 86 86 msgid "Reviews" 87 87 msgstr "" 88 88 89 #: includes/class-backend.php:2 4889 #: includes/class-backend.php:258 90 90 msgid "Changelog" 91 91 msgstr "" 92 92 93 #: includes/class-backend.php:2 5093 #: includes/class-backend.php:260 94 94 msgid "Discussion" 95 95 msgstr "" 96 96 97 #: includes/class-backend.php:2 5897 #: includes/class-backend.php:268 98 98 msgid "Settings updated." 99 99 msgstr "" 100 100 101 #: includes/class-backend.php:2 65102 #: includes/class-backend.php:6 41101 #: includes/class-backend.php:275 102 #: includes/class-backend.php:669 103 103 msgid "Settings" 104 104 msgstr "" 105 105 106 #: includes/class-backend.php:2 69106 #: includes/class-backend.php:279 107 107 msgid "Localization" 108 108 msgstr "" 109 109 110 #: includes/class-backend.php:2 74111 #: includes/class-backend.php:6 42110 #: includes/class-backend.php:284 111 #: includes/class-backend.php:670 112 112 msgid "Premium Version" 113 113 msgstr "" 114 114 115 #: includes/class-backend.php:2 77115 #: includes/class-backend.php:287 116 116 msgid "Essential Kit" 117 117 msgstr "" 118 118 119 #: includes/class-backend.php: 295119 #: includes/class-backend.php:305 120 120 msgid "Position" 121 121 msgstr "" 122 122 123 #: includes/class-backend.php: 298123 #: includes/class-backend.php:308 124 124 msgid "Above the add to cart button" 125 125 msgstr "" 126 126 127 #: includes/class-backend.php: 299127 #: includes/class-backend.php:309 128 128 msgid "Under the add to cart button" 129 129 msgstr "" 130 130 131 #: includes/class-backend.php:3 00131 #: includes/class-backend.php:310 132 132 msgid "Under the title" 133 133 msgstr "" 134 134 135 #: includes/class-backend.php:3 01135 #: includes/class-backend.php:311 136 136 msgid "Under the price" 137 137 msgstr "" 138 138 139 #: includes/class-backend.php:3 02139 #: includes/class-backend.php:312 140 140 msgid "Under the excerpt" 141 141 msgstr "" 142 142 143 #: includes/class-backend.php:3 03143 #: includes/class-backend.php:313 144 144 msgid "Under the meta" 145 145 msgstr "" 146 146 147 #: includes/class-backend.php:3 04147 #: includes/class-backend.php:314 148 148 msgid "Under the summary" 149 149 msgstr "" 150 150 151 #: includes/class-backend.php:3 05151 #: includes/class-backend.php:315 152 152 msgid "None (hide it)" 153 153 msgstr "" 154 154 155 155 #. translators: shortcode 156 #: includes/class-backend.php:3 07156 #: includes/class-backend.php:317 157 157 #, php-format 158 158 msgid "Choose where to display the pricing table on a single product page; use %s shortcode to place it anywhere." 159 159 msgstr "" 160 160 161 #: includes/class-backend.php:3 11161 #: includes/class-backend.php:321 162 162 msgid "Hide on low-stock products" 163 163 msgstr "" 164 164 165 #: includes/class-backend.php:314 165 #: includes/class-backend.php:324 166 #: includes/class-backend.php:345 167 #: includes/class-backend.php:377 168 msgid "Yes" 169 msgstr "" 170 171 #: includes/class-backend.php:325 172 #: includes/class-backend.php:336 173 #: includes/class-backend.php:346 174 #: includes/class-backend.php:378 175 msgid "No" 176 msgstr "" 177 178 #: includes/class-backend.php:327 179 msgid "Hide the pricing table for products with inventory quantities lower than the minimum quantity specified in the pricing options." 180 msgstr "" 181 182 #: includes/class-backend.php:331 183 msgid "Change price" 184 msgstr "" 185 186 #: includes/class-backend.php:334 187 msgid "Replace by active price" 188 msgstr "" 189 166 190 #: includes/class-backend.php:335 167 #: includes/class-backend.php:367168 msgid "Yes"169 msgstr ""170 171 #: includes/class-backend.php:315172 #: includes/class-backend.php:326173 #: includes/class-backend.php:336174 #: includes/class-backend.php:368175 msgid "No"176 msgstr ""177 178 #: includes/class-backend.php:317179 msgid "Hide the pricing table for products with inventory quantities lower than the minimum quantity specified in the pricing options."180 msgstr ""181 182 #: includes/class-backend.php:321183 msgid "Change price"184 msgstr ""185 186 #: includes/class-backend.php:324187 msgid "Replace by active price"188 msgstr ""189 190 #: includes/class-backend.php:325191 191 msgid "Replace by total" 192 192 msgstr "" 193 193 194 #: includes/class-backend.php:3 28194 #: includes/class-backend.php:338 195 195 msgid "Change the main price when updating the quantity." 196 196 msgstr "" 197 197 198 #: includes/class-backend.php:3 32198 #: includes/class-backend.php:342 199 199 msgid "Click to set" 200 200 msgstr "" 201 201 202 #: includes/class-backend.php:3 38202 #: includes/class-backend.php:348 203 203 msgid "Change the main quantity when clicking on a pricing row." 204 204 msgstr "" 205 205 206 #: includes/class-backend.php:3 42206 #: includes/class-backend.php:352 207 207 msgid "Active color" 208 208 msgstr "" 209 209 210 210 #. translators: color 211 #: includes/class-backend.php:3 49211 #: includes/class-backend.php:359 212 212 #, php-format 213 213 msgid "Choose the color for the active price, default %s" 214 214 msgstr "" 215 215 216 #: includes/class-backend.php:3 53216 #: includes/class-backend.php:363 217 217 msgid "Active background color" 218 218 msgstr "" 219 219 220 220 #. translators: color 221 #: includes/class-backend.php:3 60221 #: includes/class-backend.php:370 222 222 #, php-format 223 223 msgid "Choose the background color for the active price, default %s" 224 224 msgstr "" 225 225 226 #: includes/class-backend.php:3 64226 #: includes/class-backend.php:374 227 227 msgid "Hide first row" 228 228 msgstr "" 229 229 230 #: includes/class-backend.php:3 70230 #: includes/class-backend.php:380 231 231 msgid "Hide the first row that show the original price." 232 232 msgstr "" 233 233 234 #: includes/class-backend.php:3 74234 #: includes/class-backend.php:384 235 235 msgid "After text" 236 236 msgstr "" 237 237 238 #: includes/class-backend.php:3 77238 #: includes/class-backend.php:387 239 239 msgid "Show" 240 240 msgstr "" 241 241 242 #: includes/class-backend.php:3 78242 #: includes/class-backend.php:388 243 243 msgid "Hide" 244 244 msgstr "" 245 245 246 #: includes/class-backend.php:3 80246 #: includes/class-backend.php:390 247 247 msgid "Show/hide the after text on each price row." 248 248 msgstr "" 249 249 250 #: includes/class-backend.php:3 84250 #: includes/class-backend.php:394 251 251 msgid "Default after text" 252 252 msgstr "" 253 253 254 #: includes/class-backend.php: 390254 #: includes/class-backend.php:400 255 255 msgid "You can use [p] for percentage discount, [a] for amount discount. E.g: (saved [p])" 256 256 msgstr "" 257 257 258 #: includes/class-backend.php: 395258 #: includes/class-backend.php:405 259 259 msgid "Pricing table" 260 260 msgstr "" 261 261 262 #: includes/class-backend.php: 399263 #: includes/class-backend.php:4 48264 #: includes/class-backend.php: 591262 #: includes/class-backend.php:409 263 #: includes/class-backend.php:467 264 #: includes/class-backend.php:619 265 265 msgid "import / export" 266 266 msgstr "" 267 267 268 #: includes/class-backend.php:4 57269 #: includes/templates/role-price.php:11 7268 #: includes/class-backend.php:476 269 #: includes/templates/role-price.php:112 270 270 msgid "Default Table" 271 271 msgstr "" 272 272 273 #: includes/class-backend.php:4 59274 #: includes/class-backend.php:5 37273 #: includes/class-backend.php:478 274 #: includes/class-backend.php:556 275 275 msgid "Leave blank to use the default text and its equivalent translation in multiple languages." 276 276 msgstr "" 277 277 278 #: includes/class-backend.php:463 279 #: includes/class-backend.php:468 280 #: includes/class-backend.php:746 278 #: includes/class-backend.php:482 279 #: includes/class-backend.php:487 280 #: includes/class-backend.php:775 281 #: includes/class-frontend.php:380 282 #: includes/templates/role-price.php:134 283 msgid "Quantity" 284 msgstr "" 285 286 #: includes/class-backend.php:492 287 #: includes/class-backend.php:497 288 #: includes/class-backend.php:776 289 #: includes/class-backend.php:859 281 290 #: includes/class-frontend.php:381 282 #: includes/templates/role-price.php:139 283 msgid "Quantity" 284 msgstr "" 285 286 #: includes/class-backend.php:473 287 #: includes/class-backend.php:478 288 #: includes/class-backend.php:747 289 #: includes/class-backend.php:830 290 #: includes/class-frontend.php:382 291 #: includes/templates/role-price.php:146 291 #: includes/templates/role-price.php:141 292 292 msgid "Price" 293 293 msgstr "" 294 294 295 #: includes/class-backend.php: 483296 #: includes/class-backend.php: 488297 #: includes/class-frontend.php:38 4295 #: includes/class-backend.php:502 296 #: includes/class-backend.php:507 297 #: includes/class-frontend.php:383 298 298 msgid "Tier Total" 299 299 msgstr "" 300 300 301 #: includes/class-backend.php: 493301 #: includes/class-backend.php:512 302 302 msgid "Min outliers" 303 303 msgstr "" 304 304 305 #: includes/class-backend.php: 498305 #: includes/class-backend.php:517 306 306 #: includes/class-frontend.php:190 307 #: includes/class-frontend.php:39 6307 #: includes/class-frontend.php:395 308 308 msgid "<{min}" 309 309 msgstr "" 310 310 311 #: includes/class-backend.php:5 00311 #: includes/class-backend.php:519 312 312 msgid "Values smaller than min." 313 313 msgstr "" 314 314 315 #: includes/class-backend.php:5 04315 #: includes/class-backend.php:523 316 316 msgid "Single value" 317 317 msgstr "" 318 318 319 #: includes/class-backend.php:5 09320 #: includes/class-frontend.php:26 7321 #: includes/class-frontend.php:47 4319 #: includes/class-backend.php:528 320 #: includes/class-frontend.php:266 321 #: includes/class-frontend.php:472 322 322 msgid "{single}" 323 323 msgstr "" 324 324 325 #: includes/class-backend.php:5 14325 #: includes/class-backend.php:533 326 326 msgid "Values between min and max" 327 327 msgstr "" 328 328 329 #: includes/class-backend.php:5 19330 #: includes/class-frontend.php:25 8331 #: includes/class-frontend.php:46 5329 #: includes/class-backend.php:538 330 #: includes/class-frontend.php:257 331 #: includes/class-frontend.php:463 332 332 msgid "{from} - {to}" 333 333 msgstr "" 334 334 335 #: includes/class-backend.php:5 24335 #: includes/class-backend.php:543 336 336 msgid "Max & outliers" 337 337 msgstr "" 338 338 339 #: includes/class-backend.php:5 29340 #: includes/class-frontend.php:24 6341 #: includes/class-frontend.php:45 3339 #: includes/class-backend.php:548 340 #: includes/class-frontend.php:245 341 #: includes/class-frontend.php:451 342 342 msgid "{max}+" 343 343 msgstr "" 344 344 345 #: includes/class-backend.php:5 31345 #: includes/class-backend.php:550 346 346 msgid "Max quantity and larger values." 347 347 msgstr "" 348 348 349 #: includes/class-backend.php:5 35350 #: includes/templates/role-price.php:11 8349 #: includes/class-backend.php:554 350 #: includes/templates/role-price.php:113 351 351 msgid "Quick Buy Table" 352 352 msgstr "" 353 353 354 #: includes/class-backend.php:5 41354 #: includes/class-backend.php:560 355 355 msgid "Item quantity (singular)" 356 356 msgstr "" 357 357 358 358 #. translators: qty 359 #: includes/class-backend.php:5 48360 #: includes/class-frontend.php:35 3359 #: includes/class-backend.php:567 360 #: includes/class-frontend.php:352 361 361 #, php-format 362 362 msgid "%s item" 363 363 msgstr "" 364 364 365 #: includes/class-backend.php:5 52365 #: includes/class-backend.php:571 366 366 msgid "Item quantity (plural)" 367 367 msgstr "" 368 368 369 369 #. translators: qty 370 #: includes/class-backend.php:5 59371 #: includes/class-frontend.php:35 3370 #: includes/class-backend.php:578 371 #: includes/class-frontend.php:352 372 372 #, php-format 373 373 msgid "%s items" 374 374 msgstr "" 375 375 376 #: includes/class-backend.php:5 63376 #: includes/class-backend.php:582 377 377 msgid "Item price" 378 378 msgstr "" 379 379 380 380 #. translators: price 381 #: includes/class-backend.php:5 70382 #: includes/class-frontend.php:3 60381 #: includes/class-backend.php:589 382 #: includes/class-frontend.php:359 383 383 #, php-format 384 384 msgid "%s for each product" 385 385 msgstr "" 386 386 387 #: includes/class-backend.php:5 75388 #: includes/class-backend.php: 581389 #: includes/class-frontend.php:37 2387 #: includes/class-backend.php:594 388 #: includes/class-backend.php:600 389 #: includes/class-frontend.php:371 390 390 msgid "Add to cart" 391 391 msgstr "" 392 392 393 #: includes/class-backend.php:6 58393 #: includes/class-backend.php:686 394 394 msgid "Community support" 395 395 msgstr "" 396 396 397 #: includes/class-backend.php:7 48398 #: includes/templates/role-price.php:1 52397 #: includes/class-backend.php:777 398 #: includes/templates/role-price.php:147 399 399 msgid "Leave empty to use the default text." 400 400 msgstr "" 401 401 402 #: includes/class-backend.php:7 49403 #: includes/templates/role-price.php: 53404 #: includes/templates/role-price.php:15 8402 #: includes/class-backend.php:778 403 #: includes/templates/role-price.php:48 404 #: includes/templates/role-price.php:153 405 405 msgid "remove" 406 406 msgstr "" 407 407 408 #: includes/class-backend.php: 791408 #: includes/class-backend.php:820 409 409 msgid "Product price:" 410 410 msgstr "" 411 411 412 #: includes/class-backend.php:8 12412 #: includes/class-backend.php:841 413 413 #: includes/templates/add-new.php:12 414 #: includes/templates/role-price.php:2 6415 #: includes/templates/role-price.php:3 8414 #: includes/templates/role-price.php:20 415 #: includes/templates/role-price.php:32 416 416 msgid "All" 417 417 msgstr "" 418 418 419 #: includes/class-backend.php:8 15419 #: includes/class-backend.php:844 420 420 msgid "User role:" 421 421 msgstr "" 422 422 423 #: includes/class-backend.php:8 19424 #: includes/class-backend.php:8 21423 #: includes/class-backend.php:848 424 #: includes/class-backend.php:850 425 425 msgid "Apply for:" 426 426 msgstr "" 427 427 428 #: includes/class-backend.php:8 19428 #: includes/class-backend.php:848 429 429 msgid "all products" 430 430 msgstr "" 431 431 432 #: includes/class-backend.php:8 25432 #: includes/class-backend.php:854 433 433 msgid "Pricing method:" 434 434 msgstr "" 435 435 436 #: includes/class-backend.php:8 26436 #: includes/class-backend.php:855 437 437 msgid "Layout:" 438 438 msgstr "" 439 439 440 #: includes/class-backend.php:8 29441 #: includes/class-backend.php:8 45442 #: includes/templates/role-price.php:12 5440 #: includes/class-backend.php:858 441 #: includes/class-backend.php:874 442 #: includes/templates/role-price.php:120 443 443 msgid "Quantity-based pricing options" 444 444 msgstr "" 445 445 446 #: includes/class-backend.php:8 30446 #: includes/class-backend.php:859 447 447 msgid "Qty" 448 448 msgstr "" 449 449 450 #: includes/class-backend.php:8 30450 #: includes/class-backend.php:859 451 451 msgid "Text" 452 452 msgstr "" 453 453 454 #: includes/class-backend.php:8 45454 #: includes/class-backend.php:874 455 455 msgid "Not set" 456 456 msgstr "" 457 457 458 #: includes/class-frontend.php:55 8458 #: includes/class-frontend.php:556 459 459 msgid "Before price table" 460 460 msgstr "" 461 461 462 #: includes/class-frontend.php:55 9462 #: includes/class-frontend.php:557 463 463 msgid "After price table" 464 464 msgstr "" 465 465 466 466 #: includes/templates/add-new.php:13 467 #: includes/templates/role-price.php: 30467 #: includes/templates/role-price.php:24 468 468 msgid "User (logged in)" 469 469 msgstr "" 470 470 471 471 #: includes/templates/add-new.php:14 472 #: includes/templates/role-price.php: 34472 #: includes/templates/role-price.php:28 473 473 msgid "Guest (not logged in)" 474 474 msgstr "" … … 478 478 msgstr "" 479 479 480 #: includes/templates/role-price.php:4 9480 #: includes/templates/role-price.php:44 481 481 msgid "move" 482 482 msgstr "" 483 483 484 #: includes/templates/role-price.php:47 485 msgid "duplicate" 486 msgstr "" 487 484 488 #: includes/templates/role-price.php:52 485 msgid "duplicate"486 msgstr ""487 488 #: includes/templates/role-price.php:57489 489 msgid "Apply for" 490 490 msgstr "" 491 491 492 #: includes/templates/role-price.php: 63492 #: includes/templates/role-price.php:58 493 493 msgid "All products" 494 494 msgstr "" 495 495 496 #: includes/templates/role-price.php:6 5496 #: includes/templates/role-price.php:60 497 497 msgid "Selected products (Premium)" 498 498 msgstr "" 499 499 500 #: includes/templates/role-price.php: 73500 #: includes/templates/role-price.php:68 501 501 msgid "Exclude on-sale products" 502 502 msgstr "" 503 503 504 #: includes/templates/role-price.php:9 8504 #: includes/templates/role-price.php:93 505 505 msgid "Pricing method" 506 506 msgstr "" 507 507 508 #: includes/templates/role-price.php: 101508 #: includes/templates/role-price.php:96 509 509 msgid "Volume pricing: One unit price only that is corresponding to the quantity level will be applied. Tiered pricing: Multiple unit prices will be applied when the selected quantity covers over the tiers." 510 510 msgstr "" 511 511 512 #: includes/templates/role-price.php: 104512 #: includes/templates/role-price.php:99 513 513 msgid "Volume pricing" 514 514 msgstr "" 515 515 516 #: includes/templates/role-price.php:10 5516 #: includes/templates/role-price.php:100 517 517 msgid "Tiered pricing" 518 518 msgstr "" 519 519 520 #: includes/templates/role-price.php:1 11520 #: includes/templates/role-price.php:106 521 521 msgid "Layout" 522 522 msgstr "" 523 523 524 #: includes/templates/role-price.php:109 525 msgid "Choose the layout for the pricing table on a single product page." 526 msgstr "" 527 524 528 #: includes/templates/role-price.php:114 525 msgid "Choose the layout for the pricing table on a single product page."526 msgstr ""527 528 #: includes/templates/role-price.php:119529 529 msgid "Compact" 530 530 msgstr "" 531 531 532 #: includes/templates/role-price.php:12 7532 #: includes/templates/role-price.php:122 533 533 msgid "Set the price in numbers and the following characters: + / - / %. For example: +2: Increase the product price by 2 -5: Decrease the product price by 5 10: Set the new product price as 10 90%: Set the new product price as 90% of the original price." 534 534 msgstr "" 535 535 536 #: includes/templates/role-price.php:16 8536 #: includes/templates/role-price.php:163 537 537 msgid "+ New row" 538 538 msgstr "" -
wpc-price-by-quantity/trunk/readme.txt
r3473223 r3486551 4 4 Tags: woocommerce, wpc, quantity, tiered pricing, volume pricing 5 5 Tested up to: 6.9 6 Version: 5.3. 87 Stable tag: 5.3. 86 Version: 5.3.9 7 Stable tag: 5.3.9 8 8 License: GPLv2 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 115 115 == Changelog == 116 116 117 = 5.3.9 = 118 * Fixed: Minor CSS/JS issues in the backend 119 * Updated: Compatible with WP 6.9 & Woo 10.6 120 117 121 = 5.3.8 = 118 122 * Updated: Optimized the code -
wpc-price-by-quantity/trunk/wpc-price-by-quantity.php
r3473223 r3486551 4 4 Plugin URI: https://wpclever.net/ 5 5 Description: Offering quantity-based prices would be one of the most effective and powerful methods to urge buyers with very few convincing actions needed. 6 Version: 5.3. 86 Version: 5.3.9 7 7 Author: WPClever 8 8 Author URI: https://wpclever.net … … 13 13 Tested up to: 6.9 14 14 WC requires at least: 3.0 15 WC tested up to: 10. 515 WC tested up to: 10.6 16 16 License: GPLv2 or later 17 17 License URI: http://www.gnu.org/licenses/gpl-2.0.html 18 18 */ 19 19 20 ! defined( 'WPCPQ_VERSION' ) && define( 'WPCPQ_VERSION', '5.3. 8' );20 ! defined( 'WPCPQ_VERSION' ) && define( 'WPCPQ_VERSION', '5.3.9' ); 21 21 ! defined( 'WPCPQ_LITE' ) && define( 'WPCPQ_LITE', __FILE__ ); 22 22 ! defined( 'WPCPQ_FILE' ) && define( 'WPCPQ_FILE', __FILE__ ); … … 29 29 ! defined( 'WPC_URI' ) && define( 'WPC_URI', WPCPQ_URI ); 30 30 31 include 'includes/log/wpc-log.php'; 31 32 include 'includes/dashboard/wpc-dashboard.php'; 32 33 include 'includes/kit/wpc-kit.php';
Note: See TracChangeset
for help on using the changeset viewer.