Forked from greathmaster/pmpro-percent-off-discount-code.php
Created
May 13, 2020 22:11
-
-
Save femiyb/b7d7bd269a1859833023bcdaa6b58569 to your computer and use it in GitHub Desktop.
PMPro percent off discount codes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| PMPro percent off discount codes. Adds a text field to the discount code settings to define a percentage off the membership level. This will override any other discount code settings for the level. Currently, only works on initial one-time payments. | |
| */ | |
| function pmpropd_pmpro_discount_code_after_level_settings( $code_id, $level ) { | |
| $percents = pmpro_getDCPDs( $code_id ); | |
| if ( ! empty( $percents [ $level->id ] ) ) { | |
| $percent = $percents [ $level->id ]; | |
| } else { | |
| $percent = ''; | |
| } | |
| ?> | |
| <table> | |
| <tbody class="form-table"> | |
| <tr> | |
| <td> | |
| <tr> | |
| <th scope="row" valign="top"><label for="percent_discount"> Percent Discount:</label></th> | |
| <td><input name="percent_discount[]" type="text" size="20" value="<?php echo esc_attr( $percent); ?>" />% <small> Percentage Discount. This will override the other level settings. </small></td> | |
| </tr> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <?php | |
| } | |
| add_action( 'pmpro_discount_code_after_level_settings', 'pmpropd_pmpro_discount_code_after_level_settings', 10, 2 ); | |
| function pmpropd_pmpro_save_discount_code_level( $code_id, $level_id ) { | |
| $all_levels_a = $_REQUEST['all_levels']; | |
| $percent_discount_a = $_REQUEST['percent_discount']; | |
| if ( ! empty( $all_levels_a ) ) { | |
| $key = array_search( $level_id, $all_levels_a ); | |
| $percents = pmpro_getDCPDs( $code_id ); | |
| $percents [ $level_id ] = $percent_discount_a[ $key ]; | |
| pmpro_saveDCPDs( $code_id, $percents); | |
| } | |
| } | |
| add_action( 'pmpro_save_discount_code_level', 'pmpropd_pmpro_save_discount_code_level', 10, 2 ); | |
| function pmpro_saveDCPDs( $code_id, $percents ) { | |
| $all_percents = get_option( 'pmpro_discount_code_percent_discounts', array() ); | |
| $all_percents[ $code_id ] = $percents; | |
| update_option( 'pmpro_discount_code_percent_discounts', $all_percents ); | |
| } | |
| function pmpro_getDCPDs( $code_id ) { | |
| $all_percents = get_option( 'pmpro_discount_code_percent_discounts', array() ); | |
| if ( ! empty( $all_percents ) && ! empty( $all_percents[ $code_id ] ) ) { | |
| return $all_percents[ $code_id ]; | |
| } else { | |
| return false; | |
| } | |
| } | |
| function pmpropd_pmpro_discount_code_level($level, $code_id) { | |
| $percent = pmpro_getDCPDs($code_id); | |
| if(isset($percent) && isset($percent[$level->id])) { | |
| $original_level = pmpro_getLevel($level); | |
| $percent_off = $percent[$level->id]; | |
| $level = $original_level; | |
| $level->initial_payment = (1 - 0.01*$percent_off)*$level->initial_payment; | |
| $level->billing_amount = (1 - 0.01*$percent_off)*$level->billing_amount; | |
| } | |
| return $level; | |
| } | |
| add_filter("pmpro_discount_code_level", "pmpropd_pmpro_discount_code_level", 10, 2); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment