Skip to content

Instantly share code, notes, and snippets.

@indigetal
Last active August 9, 2023 15:31
Show Gist options
  • Save indigetal/8652316da60476f3ae0e173b420e7999 to your computer and use it in GitHub Desktop.
Save indigetal/8652316da60476f3ae0e173b420e7999 to your computer and use it in GitHub Desktop.
The PMPro code snippet in https://www.paidmembershipspro.com/multiple-membership-levels-per-user-pmpro-workarounds/ does not work as-is. It is a very simple premise, only checking for one option. Recurring payments do not work the way it was originally written either. This does the same thing using a checkbox and only allowing for a one-time pay…
<?php
function my_pmpro_adjustable_level_cost($level)
{
if(isset($_REQUEST['field_name']))
{
$level->initial_payment = $level->initial_payment + 100; //specify the cost of the selected option
// You cannot update recurring payments with this code as-is, see comment below
}
return $level;
}
add_filter("pmpro_checkout_level", "my_pmpro_adjustable_level_cost");
?>
@indigetal
Copy link
Author

There are a couple of housekeeping items to ensure you are displaying accurate information to your users. In Memberships > Settings > Email Templates, select the email template “Checkout - Paid,” and “Checkout - Paid (admin)” and remove the following line: <p>Membership Fee: !!membership_cost!!</p> That line not only displays the initial cost of the membership plan and not the updated membership plan with the options, but the way that it is phrased: “Membership Fee: The price for membership is $x now, and $x every Month” may confuse users who did not purchase a renewable plan (I have contacted PMPro about this).

Finally, if you have the Auto-Renewal Checkbox addon, the checkbox label includes a code-generated calculation of the plan cost. This is also no longer accurate once our custom code is implemented. To update the calculation based on the selected options would require Ajax to handle the checkbox toggle event and a server-side request to calculate and return the calculation, as well as significant modifications to our custom code. That is beyond the scope of this tutorial. Instead, let’s just replace the label of the checkbox with the static text, “Renew your plan” using jquery. Place this code in your child theme’s functions.php file:

function custom_auto_renewal_checkbox_label() {
    if ( is_page( 'membership-checkout' ) ) {
        ?>
        <style>
            /* Hide the original auto-renewal checkbox label initially */
            label[for="autorenew"].pmpro_clickable {
                visibility: hidden;
            }
        </style>
        <script>
            jQuery(document).ready(function($) {
                    // Show the updated auto-renewal checkbox label
                    $('label[for="autorenew"].pmpro_clickable').css('visibility', 'visible');
                    $('label[for="autorenew"].pmpro_clickable').html('Automatically renew your plan.');
            });
        </script>
        <?php
    }
}
add_action('wp_footer', 'custom_auto_renewal_checkbox_label');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment