Last active
October 26, 2020 21:10
-
-
Save greathmaster/54e2e0e60f875af3efbd25b899812e6e 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