├── .gitignore
├── README.md
├── add-ons
├── README.md
├── convertkit-paid-memberships-pro
│ └── remove-tags-after-level-change.php
├── pmpro-abandoned-cart-recovery
│ ├── attempt-recovery-if-upgrading.php
│ └── attempt-recovery-if-user-does-not-have-level.php
├── pmpro-addon-packages
│ ├── addon-packages-checkout-requires-another-addon-package.php
│ ├── addon-packages-level-all-access.php
│ ├── addon-packages-set-price-for-all.php
│ └── change-frontend-text-addon-package-purchase.php
├── pmpro-address-for-free-levels
│ └── hide-billing-fields-for-some.php
├── pmpro-advanced-levels-shortcode
│ └── allow-additional-html-tags-in-advanced-levels-shortcode-text.php
├── pmpro-affiliates
│ ├── create-affiliates-bulk.php
│ ├── create-manage-affiliates-by-level.php
│ └── show-affiliate-level-in-admin-list.php
├── pmpro-approvals
│ ├── add-birthday-column-to-approvals-admin-screen.php
│ ├── add-custom-fields-to-approvals-admin-emails.php
│ ├── add-email-confirmation-column.php
│ ├── approve-user-added-by-admin.php
│ ├── approve-user-if-already-approved.php
│ └── different-email-per-level-approved.php
├── pmpro-buddypress
│ ├── adjust-membership-tab-on-bp-profile.php
│ ├── buddypress-approvals-profile-fields-view.php
│ └── sync-buddypress-fields.php
├── pmpro-courses
│ ├── add-custom-column-counting-users-finished-lessons-and-courses.php
│ ├── remove-lesson-list-from-single-course.php
│ └── sell-courses-addon-packages.php
├── pmpro-gift-levels
│ └── remove-gift-only-levels-from-table.php
├── pmpro-google-analytics
│ ├── add-custom-user-field-to-track.php
│ ├── capture-unique-post-data.php
│ ├── exclude-users-based-on-roles.php
│ ├── remove-element-from-default-dimensions-array.php
│ └── track-custom-page.php
├── pmpro-group-accounts
│ ├── migrate_pmprosm_to_pmprogroupacct.php
│ ├── my_pmprogroupacct_enforce_same_email_domain.php
│ └── my_pmprogroupacct_require-child-level-with-code.php
├── pmpro-homepages
│ └── member-homepage-id.php
├── pmpro-import-users-from-csv
│ └── welcome-email.php
├── pmpro-limit-logins
│ ├── my_pmpro_limit_logins_number_simultaneous_logins.php
│ └── my_pmpro_limit_logins_simultaneous_logins_based_on_level.php
├── pmpro-limit-post-views
│ ├── always-restrict-posts.php
│ ├── countdown-banner.php
│ ├── limit-views-more-post-types.php
│ ├── no-redirect-blur-overlay-banner.php
│ └── views-used-banner.php
├── pmpro-local-pricing
│ └── allow-discount-code-based-on-location.php
├── pmpro-mailchimp
│ ├── send-enddate-to-mailchimp.php
│ ├── send-shipping-fields-mailchimp.php
│ └── unsubscribe-user-on-deletion-mailchimp.php
├── pmpro-member-rss
│ └── add-member-rss-feed.php
├── pmpro-membership-card
│ ├── custom-pmpro-membership-card-qr-code-size.php
│ ├── my-pmpro-membership-card-override-template.php
│ ├── pmpro-qr-data-other-filter.php
│ ├── qr-code-return-membership-info.php
│ ├── qr-code-return-membership-profile.php
│ └── show-member-number-on-membership-card.php
├── pmpro-membership-directory
│ ├── README.md
│ ├── append-cf7-membership-profile.php
│ ├── display-linked-child-accounts-on-parent-profile.php
│ ├── pmpro-directory-sort-last-name.php
│ ├── pmpromd-disable-oembed.php
│ ├── pmpromd-hide-empty-elements.php
│ ├── pmpromd-make-clickable.php
│ ├── pmpromd-mask-phone-number-field-for-non-members.php
│ └── sort-pmpro-member-directory-order-by-custom-user-meta-field.php
├── pmpro-membership-maps
│ ├── add-widget-filter-member-maps-location-distance.php
│ ├── adds-address-fields-to-the-add-member-from-admin-page.php
│ ├── custom-billing-fields-geocode-on-checkout.php
│ ├── mypmpromm-custom-billing-save-profile.php
│ ├── styling-membership-map-using-google-maps.php
│ └── use-custom-geocode-key.php
├── pmpro-multiple-memberships-per-user
│ └── README.md
├── pmpro-nav-menus
│ └── pmpro-nav-menus-mmpu-priority-level.php
├── pmpro-reports-dashboard
│ └── pmpro-reports-dashboard-filter-reports.php
├── pmpro-roles
│ ├── README.md
│ ├── block-dashboard-access-for-additional-user-roles.php
│ ├── bulk-update-roles-admin-script.php
│ └── custom-pmpro-roles-update-caps.php
├── pmpro-series
│ ├── allow-series-take-new-post-types.php
│ ├── limit-posts-pmpro-series.php
│ └── member-unsubscribe-from-new-series-post-emails.php
├── pmpro-set-expiration-dates
│ └── change-year-by-month.php
├── pmpro-sponsored-members
│ ├── generate-sponsor-code-for-existing-parent-members.php
│ ├── pmpro-sponsored-members-add-additional-fields-to-child-accounts.php
│ └── show-sponsored-child-accounts-pmpro-member-profile.php
├── pmpro-subscription-delays
│ ├── remove-subscription-delay-for-members.php
│ └── subscription-delay-one-time-credit-card-required-trial.php
├── pmpro-userpages
│ ├── email-member-when-user-page-is-updated.php
│ └── only-one-user-page-only.php
├── pmpro-vat-tax
│ ├── README.md
│ ├── remove-uk-from-eu.php
│ └── show-adjusted-billing-for-eu-tax.php
├── pmpro-woocommerce
│ ├── add-members-account-tab-to-woo.php
│ ├── hide-prices-from-non-members.php
│ ├── only-discount-regular-price-items.php
│ ├── restrict-woocommerce-shop-to-specific-levels.php
│ ├── set-ebook-category-member-price-to-free.php
│ ├── set-variable-product-pricing-per-level.php
│ ├── stop-non-pmpro-members-from-buying-woo-catagory.php
│ ├── strike-through-pricing-woocommerce.php
│ └── tease-membership-price-to-non-members.php
├── pmpro-zapier
│ ├── README.md
│ ├── add-group-account-code-zapier.php
│ ├── add-sponsored-discount-code-zapier.php
│ ├── send-billing-country-zapier.php
│ └── send-user-fields-after-checkout.php
├── register-helper
│ └── custom-user-avatars-register-helper.php
└── wp-bouncer
│ └── my_wp_bouncer_number_simultaneous_logins.php
├── admin-pages
├── README.md
├── add-custom-column-to-memberlist.php
├── add-quarterly-membership-level-template.php
├── add-report-widgets-to-dashboard.php
├── create-custom-report.php
├── remove-membership-level-templates-from-popup.php
├── requires-membership-column-categories.php
├── requires-membership-column-pages.php
├── requires-membership-column-posts.php
├── show-billing-address-members-list.php
├── show-membership-number-members-list.php
├── show-next-last-payment-dates-members-list.php
└── show-renewal-date-orders-list.php
├── block-templates
├── README.md
└── redirect-member-on-login.html
├── blocks-shortcodes
├── README.md
├── member-count-shortcode.php
└── member-directory-search-shortcode.php
├── checkout
├── README.md
├── add-australian-gst.php
├── add-cc-and-paypal-logos-checkout-page.css
├── add-cc-logos-checkout-page.php
├── add-fixed-fee-stripe.php
├── add-level-specific-fee-to-checkout.php
├── add-multiple-required-consent-boxes-at-checkout.php
├── add-new-default-currency.php
├── add-select-payment-plan-box-membership-checkout.php
├── add-text-before-submit-on-checkout.php
├── adjust-default-currency-format.php
├── allow-expiring-members-extend-renewal-change.php
├── autofill-billing-fields-from-woocommerce.php
├── basic-hcaptcha-implementation.php
├── custom-tax-example.php
├── customize-membership-confirmation-message.php
├── email-only-checkout.php
├── format_phone_field.php
├── generate-user-data-from-billing-information.php
├── generate-username-from-email-pmpro.php
├── hide-confirm-email-password.php
├── keep-startdate-on-level-change-at-checkout.php
├── load-css-for-checkout-page.php
├── load-custom-TOS-by-level.php
├── membership-duration-checkout-field.php
├── modify-level-price-based-selections.php
├── mypmpromm-custom-billing-add-fields.php
├── name-email-only-checkout.php
├── non-us-taxes.php
├── pmpro-processing-message-css-animated-bars.php
├── redirect-members-unique-confirmation-page-checkout-level.php
├── remove-custom-trial-for-existing-members.php
├── restrict-checkout-by-countries.php
├── restrict-checkout-by-email-domain.php
├── restrict-checkout-by-email-or-username.php
├── restrict-terms-in-usernames.php
├── run-order-creation-checks-before-user-creation.php
├── select-offline-payment-type-check-gateway.php
├── sell-a-la-carte-access-to-cats.php
├── set-display-name-to-username-new-user-array.php
├── set-pmpro-default-country.php
├── stop-members-from-renewing-specific-level.php
├── stop-members-from-renewing.php
├── terms-of-service-as-a-link-only.php
├── terms-of-service-show-todays-date.php
├── terms-of-service-with-page-contents.php
├── update-level-cost-with-tax.php
└── user-fields-additional-content-at-checkout.code.php
├── discount-codes
├── README.md
├── add-description-to-checkout-field-for-admin.php
├── automatically-add-discount-code.php
├── create-discount-code-for-expired-members.php
├── create-discount-code-for-use-once-per-user.php
├── new-user-only-discount-code.php
└── restrict-discount-code-by-email.php
├── email
├── README.md
├── bcc-admin-email-for-a-level.php
├── bcc-email-addresses-on-notifications.php
├── change-pmpro-email-subjects.php
├── disable-all-pmpro-email.php
├── disable-emails-by-level.php
├── membership-expiring-email-add-renewal-link-to-login-url.php
├── membership-level-name-to-email-expire-template.php
├── pmpro-email-headers-member-email.php
├── remove-user-fields-from-admin-email.php
├── send-additional-admin-activity-emails.php
├── send-additional-recurring-payment-reminder-emails.php
└── show-membership-number-in-confirmation-email.php
├── frontend-pages
├── README.md
├── add-data-invoice-bullets.php
├── add-level-name-checkout-attribute-seo.php
├── add-level-name-checkout-title-seo.php
├── add-manage-paypal-subscription-membership-account-action-link.php
├── add-members-links-to-members-account-page.php
├── add-membership-level-action-links.php
├── add-mycred-points-at-checkout.php
├── add-pmpro-level-id-to-body-class.php
├── add-user-id-to-members-account-page.php
├── change-profile-action-links.php
├── filter-pmpro-levels-page-levels.php
├── hide-levels-from-levels-page-by-id.php
├── link-to-author-archive-pmpro-member-profile-after.php
├── remove-profile-action-links.php
├── remove-rename-user-fields-member-profile-edit.php
├── show-gravatar-on-account-page.php
├── show-level-levels-page-custom-setting.php
├── show-membership-number-on-account-page.php
├── show-membership-number-on-invoice-page.php
├── show-next-payment-date-on-account-page.php
├── show-pmpro-pages-in-search.php
├── show-wp-id-on-account-page.php
└── woocommerce-billing-fields-pmpro-invoice.php
├── import-export
└── README.md
├── integration-compatibility
├── README.md
├── my-bricks-show-content-for-pmpro-levels.php
├── my-pmpro-load-shortcode-for-bricks.php
├── pmpro-elementor-allow-access-for-admins.php
└── require-custom-level-group-elementor.php
├── license.txt
├── localization
└── README.md
├── memberlite
├── memberlite-adjust-defaults-background-css-selectors.php
├── memberlite-banner-expiration-notification.php
├── memberlite-hide-author-avatars-from-loop.php
├── memberlite-modify-blog-columns-ratio.php
├── memberlite-modify-custom-post-type-columns-ratio.php
├── memberlite-modify-post-entry-meta.php
├── memberlite-remove-archive-prefix-from-masthead.php
├── memberlite-remove-enlarged-font-for-excerpt.php
├── memberlite-remove-home-from-breadcrumbs.php
├── memberlite-remove-selector-from-memberlite-defaults.php
├── memberlite-shortcodes-example-accordion.php
├── memberlite-shortcodes-example-button.php
├── memberlite-shortcodes-example-columns.php
├── memberlite-shortcodes-example-font-awesome-icon.php
├── memberlite-shortcodes-example-message.php
├── memberlite-shortcodes-example-recent-posts.php
├── memberlite-shortcodes-example-subpagelist.php
├── memberlite-shortcodes-example-tabs.php
├── memberlite-sitewide-signup-banner-example-1.php
├── memberlite-sitewide-signup-banner-example-2.php
└── memberlite-sitewide-signup-banner-example-3.php
├── membership-levels
├── README.md
├── add-grace-to-membership-level.php
├── automatically-assign-level-during-registration.php
├── cancel-membership-level-immediately.php
├── change-membership-level-on-cancellation-expiration-allow-default-cancel.php
├── change-membership-level-on-cancellation-expiration.php
├── change-membership-level-on-expiration-only.php
├── database-script-apply-membership-level-users-without-level.sql
├── keep-free-members-in-old-members-list.php
├── limit-members-level.php
├── offer-trial-memberships-only-used-once.php
├── restrict-access-for-cpt-categories.php
├── translate-membership-levels.php
└── unlock-membership-access-without-updating-posts.php
├── misc
├── README.md
├── add-gtm-script-to-wordpress-site.php
├── allow-weak-passwords.php
├── change-wp-display-name-first-last-option-1.php
├── change-wp-display-name-first-last-option-2.php
├── changing-membership-subscription-wording.php
├── delete-wp-user-when-member-cancels.php
├── first-time-login-redirect.php
├── generate-unique-membership-number.php
├── hide-show-profile-fields-based-on-level.php
├── login-hide-username-email-in-errors.php
├── my-pmpro-assign-level-to-role.php
├── mypmpro-affwp-member-link.php
├── pmpro-at-scale-show-admins-only-in-delete-user-attribute-content-dropdown.php
├── pmpro-disable-https-redirect.php
├── pmpro-disable-register-redirect.php
├── pmpro-expire-soon-banner.php
├── pmpro-force-ssl-checkout.php
├── pmpro-skip-admin-tracking.php
├── pmpro_has_membership_access_filter_for_authors.php
├── redirect-member-on-login.php
├── redirect-member-on-logout.php
├── require-confirmed-email-address-to-login.php
├── restrict-user-login-to-active-members.php
├── return-active-members-with-usermeta-for-level-id.php
├── send-custom-dimensions-to-gtm-datalayer.php
├── send-ecommerce-events-to-gtm.php
├── shop-login-link-when-using-membership-shortcode.php
└── show-membership-level-for-comment-author.php
├── orders
├── add-mycred-points-whenever-order-created.php
├── add-refund-reason-order-meta-field.php
└── custom-pmpro-order-codes.php
├── payment-gateways
├── authorize.net
│ └── authorizenet-sent-ip.php
├── braintree
│ └── add-merchant-account-id-to-braintree-sale-array.php
├── cancel-on-billing-failure.php
├── paypal
│ └── forward-pmpro-ipn-to-another-domain.php
└── stripe
│ ├── adjust-stripe-connect-fee.php
│ ├── load-stripe-library-earlier.php
│ ├── show-checkout-session-id.php
│ └── stripe-checkout-locale.php
├── restricting-content
├── README.md
├── add-member-categories-back-to-loop.php
├── allow-access-for-admins.php
├── allow-access-for-pending-orders.php
├── change-level-edd-update-payment-status.php
├── check-default-level-on-new-post.php
├── filter-pmpro-no-access-message-body.php
├── filter-pmpro-no-access-message-header.php
├── filter-text-for-logged-out-visitors.php
├── filter-text-for-non-logged-in-member.php
├── lock-down-everything-but-homepage.php
├── lockdown-everything-except-homepage.php
├── pause-member-access.php
├── redirect-empty-category-archive.php
├── redirect-non-members-away-from-member-content.php
├── redirect-non-members-away-from-urls.php
├── remove-no-access-message-from-homepage.php
├── restrict-by-custom-taxonomy.php
├── restrict-comments-to-members-only.php
└── unlock-post-by-ID-on-specifc-date.php
└── user-fields
├── add-billing-address-to-user-profile-edit-page.php
├── add-conditional-referred-by-user-field.php
├── add-mmpu-level-based-on-checkout-field.php
├── add-user-fields.php
├── change-user-field-type-by-role.php
├── custom-user-taxonomy-field.php
├── frontend-profile-require-user-fields.php
├── save-function-add-user-field-filter.php
├── save-function-custom-callback.php
├── save-function-must-love-dogs-example.php
└── update-price-by-conditional-user-field.php
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
--------------------------------------------------------------------------------
/add-ons/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/add-ons/convertkit-paid-memberships-pro/remove-tags-after-level-change.php:
--------------------------------------------------------------------------------
1 |
26 |
35 | array(
22 | 'class' => array(),
23 | ),
24 | 'h2' => array(),
25 | );
26 |
27 | $allowed_html = array_merge( $allowed_html, $html );
28 |
29 | return $allowed_html;
30 | }
31 | add_filter( 'pmproal_allowed_html', 'my_pmproal_allow_html_tags' );
--------------------------------------------------------------------------------
/add-ons/pmpro-approvals/add-birthday-column-to-approvals-admin-screen.php:
--------------------------------------------------------------------------------
1 | Settings > User Fields screen.
6 | *
7 | * title: Add birthday field to Approvals admin screen
8 | * layout: snippet
9 | * collection: add-ons
10 | * category: pmpro-approvals
11 | *
12 | * You can add this recipe to your site by creating a custom plugin
13 | * or using the Code Snippets plugin available for free in the WordPress repository.
14 | * Read this companion article for step-by-step directions on either method.
15 | * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
16 | */
17 |
18 | /**
19 | * Add a column header for 'birthday' to the Memberships > Approvals admin screen.
20 | */
21 | function my_pmpro_approvals_list_extra_cols_header( $theuser ) {
22 | echo '
Birthday ';
23 | }
24 | add_action( 'pmpro_approvals_list_extra_cols_header', 'my_pmpro_approvals_list_extra_cols_header' );
25 |
26 | /**
27 | * Populate the 'birthday' column with user data.
28 | */
29 | function my_pmpro_approvals_list_extra_cols_body( $theuser ) {
30 | echo '' . get_user_meta( $theuser->ID, 'birthday', true ) . ' ';
31 | }
32 | add_action( 'pmpro_approvals_list_extra_cols_body', 'my_pmpro_approvals_list_extra_cols_body' );
33 |
--------------------------------------------------------------------------------
/add-ons/pmpro-approvals/approve-user-added-by-admin.php:
--------------------------------------------------------------------------------
1 | template == 'application_approved' ) {
30 |
31 | if ( $email->data['membership_id'] == 1 ) {
32 | $email->subject = 'Your Membership 1 Has Been Approved';
33 | $email->body = 'This is the content/body of the email for members who are approved for level 1';
34 | }
35 |
36 | if ( $email->data['membership_id'] == 2 ) {
37 | $email->subject = 'Your Membership 2 Has Been Approved';
38 | $email->body = 'This is the content/body of the email for members who are approved for level 2';
39 | }
40 | }
41 |
42 | return $email;
43 | }
44 | add_filter( 'pmpro_email_filter', 'my_pmpro_approval_email_filter', 99, 1 );
45 |
--------------------------------------------------------------------------------
/add-ons/pmpro-buddypress/adjust-membership-tab-on-bp-profile.php:
--------------------------------------------------------------------------------
1 | BuddyPress XProfile Field. Adjust this array for each field you need to map.
17 | $buddypress_mapping = array(
18 | 'company' => 'Company',
19 | 'referral' => 'Referral'
20 | );
21 |
22 | // Loop through the above array and add the buddypress field to the existing PMPro User Field.
23 | foreach( $buddypress_mapping as $user_field => $buddypress_field ) {
24 | if ( $field->name === $user_field ) {
25 | $field->buddypress = $buddypress_field;
26 | }
27 | }
28 |
29 | return $field;
30 | }
31 | add_filter( 'pmpro_add_user_field', 'my_pmpro_add_buddypress_to_existing_fields', 10, 2 );
--------------------------------------------------------------------------------
/add-ons/pmpro-courses/remove-lesson-list-from-single-course.php:
--------------------------------------------------------------------------------
1 | ID;
24 | $is_course = get_post_meta( $post_id, '_post_courses', true );
25 | $ap_posts = get_user_meta( $myuser->ID, '_pmproap_posts', true );
26 |
27 | // Bail if nothing is found and return current access.
28 | if ( empty( $ap_posts ) || empty( $is_course ) ) {
29 | return $hasaccess;
30 | }
31 |
32 | if ( in_array( $is_course[0], $ap_posts ) ) {
33 | $hasaccess = true;
34 | }
35 |
36 | return $hasaccess;
37 | }
38 | add_filter( 'pmpro_has_membership_access_filter', 'pmpro_give_access_to_users_for_course', 10, 4 );
39 |
--------------------------------------------------------------------------------
/add-ons/pmpro-gift-levels/remove-gift-only-levels-from-table.php:
--------------------------------------------------------------------------------
1 | roles;
24 |
25 | return ! empty( array_intersect( $roles, $roles_to_hide ) );
26 | }
27 | add_filter( 'pmproga4_dont_track', 'my_custom_pmproga4_dont_track_by_role' );
28 |
--------------------------------------------------------------------------------
/add-ons/pmpro-google-analytics/remove-element-from-default-dimensions-array.php:
--------------------------------------------------------------------------------
1 | id, $required_levels ) && empty( $_REQUEST['pmprogroupacct_group_code'] ) ) {
24 | pmpro_setMessage("You must use a valid group code to register for this level.", "pmpro_error");
25 | return false;
26 | }
27 |
28 | return $pmpro_continue_registration;
29 | }
30 | add_filter( 'pmpro_registration_checks', 'my_pmpro_require_group_code_to_register' );
--------------------------------------------------------------------------------
/add-ons/pmpro-homepages/member-homepage-id.php:
--------------------------------------------------------------------------------
1 | ID, $restricted_post_ids ) ) {
29 | return false;
30 | }
31 |
32 | // Otherwise, return the original value.
33 | return $allow_free_views;
34 | }
35 | add_filter( 'pmprolpv_has_membership_access', 'my_pmprolpv_always_restrict_posts', 10, 2 );
36 |
--------------------------------------------------------------------------------
/add-ons/pmpro-limit-post-views/limit-views-more-post-types.php:
--------------------------------------------------------------------------------
1 | 'CANADA10',
20 | // 'ZA' => 'LEKKER',
21 | );
22 | return $country_discount_codes;
23 | }
24 | add_filter( 'pmpro_local_pricing_discounted_countries', 'my_pmpro_local_pricing_discount_codes_by_country' );
25 |
--------------------------------------------------------------------------------
/add-ons/pmpro-mailchimp/send-enddate-to-mailchimp.php:
--------------------------------------------------------------------------------
1 | ID );
19 | $expiration_date = 'Never';
20 |
21 | // Update variable value if level has an expiration date
22 | if ( ! empty( $level->enddate ) ) {
23 | $expiration_date = date( get_option( 'date_format' ), $level->enddate );
24 | }
25 |
26 | // Create new ENDDATE field
27 | $new_fields = array(
28 | 'ENDDATE' => $expiration_date,
29 | );
30 |
31 | // join existing fields with new fields
32 | $fields = array_merge( $fields, $new_fields );
33 |
34 | return $fields;
35 | }
36 | add_action( 'pmpro_mailchimp_listsubscribe_fields', 'my_pmpro_mailchimp_add_enddate_to_merge_fields', 10, 2 );
37 |
38 | /*
39 | (Optional) Tell PMPro MailChimp to always synchronize user profile updates. By default it only synchronizes if the user's email has changed.
40 | Requires PMPro Mailchimp v2.0.3 or higher.
41 | */
42 |
43 | add_filter( 'pmpromc_profile_update', '__return_true' );
44 |
--------------------------------------------------------------------------------
/add-ons/pmpro-mailchimp/unsubscribe-user-on-deletion-mailchimp.php:
--------------------------------------------------------------------------------
1 | user_login . '/feed/' ) );
23 |
24 | // Recent posts from "members" category.
25 | $feeds['Members Feed'] = pmpromrss_url( home_url( '/category/members/feed' ) );
26 |
27 | return $feeds;
28 |
29 | }
30 | add_action('pmpromrss_feeds', 'my_pmpromrss_feeds');
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-card/custom-pmpro-membership-card-qr-code-size.php:
--------------------------------------------------------------------------------
1 | membership_level ) ) {
23 | $return_value['first_name'] = $member->first_name;
24 | $return_value['last_name'] = $member->last_name;
25 | $return_value['membership_name'] = $member->membership_level->name;
26 | $return_value['membership_expiration'] = $member->membership_level->enddate;
27 | $return_value['date_of_query'] = date_i18n( "Y-m-d H:i s" , date( 'y-m-d h:i:s' ) );
28 | } else {
29 | $return_value['membership_name'] = "No membership";
30 | }
31 | return json_encode( $return_value, JSON_UNESCAPED_UNICODE );
32 | }
33 | }
34 | add_filter( 'pmpro_membership_card_qr_data_other', 'qr_code_return_membership_info', 10, 2 );
35 |
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-card/qr-code-return-membership-profile.php:
--------------------------------------------------------------------------------
1 | user_nicename ) ){
26 | return pmpromd_build_profile_url( $pmpro_membership_card_user );
27 | }
28 | }
29 |
30 | }
31 | add_filter( 'pmpro_membership_card_qr_data_other', 'mypmro_membership_card_qr_data_profile_url', 10, 2 );
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-card/show-member-number-on-membership-card.php:
--------------------------------------------------------------------------------
1 | ID, 'member_number', true );
26 |
27 | if ( empty( $member_id ) ) {
28 | // lets generate it on the fly.
29 | $member_id = generate_member_number( $user->ID );
30 | }
31 |
32 | echo 'Membership Number: ' . esc_html( $member_id ) . '
';
33 |
34 | }
35 | add_action( 'pmpro_membership_card_after_card', 'my_show_member_number_on_card' );
36 |
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-directory/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-directory/pmpro-directory-sort-last-name.php:
--------------------------------------------------------------------------------
1 | name ) && $field->name === 'youtube_video' ) {
21 | return 'clickable_link';
22 | }
23 | return $link_display_type;
24 | }
25 | add_filter( 'pmpro_field_value_link_display_type', 'my_pmpro_field_value_link_display_type', 10, 3 );
26 |
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-directory/pmpromd-hide-empty-elements.php:
--------------------------------------------------------------------------------
1 | 4 ) {
29 | $maskLength = $length - 4;
30 | $masked_number = str_repeat( '*', $maskLength ) . substr( $numeric_value, -4 );
31 | } else {
32 | // For short numbers, mask all digits.
33 | $masked_number = str_repeat( '*', $length );
34 | }
35 |
36 | return $masked_number;
37 | }
38 |
39 | return $value;
40 | }
41 | add_filter( 'pmpromd_get_display_value', 'my_pmpromd_get_display_value_mask_phone_field', 10, 4 );
42 |
--------------------------------------------------------------------------------
/add-ons/pmpro-membership-maps/use-custom-geocode-key.php:
--------------------------------------------------------------------------------
1 | roles ) ) ) {
26 | $block = true;
27 | }
28 |
29 | return $block;
30 | }
31 | add_filter( 'pmpro_block_dashboard', 'block_dashboard_for_custom_role' );
32 |
--------------------------------------------------------------------------------
/add-ons/pmpro-roles/custom-pmpro-roles-update-caps.php:
--------------------------------------------------------------------------------
1 | add_cap( 'delete_posts', true );
31 | $role->add_cap( 'edit_posts', true );
32 | $role->add_cap( 'read', true );
33 | }
34 | add_action( 'init', 'custom_pmpro_roles_update_caps' );
35 |
--------------------------------------------------------------------------------
/add-ons/pmpro-series/allow-series-take-new-post-types.php:
--------------------------------------------------------------------------------
1 | ID );
24 | $posts_to_display = array();
25 |
26 | foreach ( $post_list as $sp ) {
27 | $posts_to_display[] = $sp;
28 | if ( max( 0, $member_days ) < $sp->delay ) {
29 | break;
30 | }
31 | }
32 |
33 | return $posts_to_display;
34 | }
35 | add_filter( 'pmpro_series_post_list_posts', 'my_pmpro_series_limit_posts_shown', 10, 2 );
36 |
--------------------------------------------------------------------------------
/add-ons/pmpro-series/member-unsubscribe-from-new-series-post-emails.php:
--------------------------------------------------------------------------------
1 | data['user_login'] );
20 | if ( $email->template == 'new_content' && '1' === $user->disable_pmpro_series_email_notifications ) {
21 | $recipient = null;
22 | }
23 | return $recipient;
24 | }
25 | add_filter( 'pmpro_email_recipient', 'my_pmpro_disable_series_new_content_email_by_usermeta', 10, 2 );
26 |
--------------------------------------------------------------------------------
/add-ons/pmpro-set-expiration-dates/change-year-by-month.php:
--------------------------------------------------------------------------------
1 | format('n');
30 |
31 | /**
32 | * Check if the month is October (month number 10) or later and update the Expiration Date to be 1 year later.
33 | * This will keep the month and day in tact.
34 | */
35 | if ( $month >= 10 ) {
36 | // str_replace 'Y1' with the 'Y2'
37 | $raw_date = str_replace( 'Y1', 'Y2', $raw_date ); // Here you may adjust the date format to your needs.
38 | }
39 |
40 | return $raw_date;
41 | }
42 | add_filter( 'pmprosed_expiration_date_raw', 'my_pmpro_programmatically_change_set_expiration_date', 10, 1 );
43 |
--------------------------------------------------------------------------------
/add-ons/pmpro-sponsored-members/show-sponsored-child-accounts-pmpro-member-profile.php:
--------------------------------------------------------------------------------
1 | ID );
17 |
18 | if ( empty( $sponsored_ids ) ) {
19 | return;
20 | }
21 |
22 | $sponsored_list = new WP_User_Query(
23 | array(
24 | 'include' => $sponsored_ids,
25 | 'orderby' => 'name',
26 | 'order' => 'ASC',
27 | )
28 | );
29 |
30 | $sponsored_members = $sponsored_list->get_results();
31 | if ( ! empty( $sponsored_members ) ) {
32 | echo 'Sponsored Members ';
33 | echo '';
34 | foreach ( $sponsored_members as $sponsored_member ) {
35 | echo '' . esc_html( $sponsored_member->data->display_name ) . ' ';
36 | }
37 | echo ' ';
38 | }
39 | }
40 | add_action( 'pmpro_member_profile_after', 'show_sponsored_child_accounts_pmpro_member_profile_after' );
41 |
--------------------------------------------------------------------------------
/add-ons/pmpro-userpages/only-one-user-page-only.php:
--------------------------------------------------------------------------------
1 | get_sale_price();
23 |
24 | if ( ! $product->is_on_sale() ) {
25 | //Its not on sale, so we can discount it
26 | return $discount_price;
27 | }
28 |
29 | //On sale, dont discount it further
30 | return $sale_price;
31 |
32 | }
33 | add_filter( 'pmprowoo_get_membership_price', 'mypmpro_discount_sales', 10, 4 );
34 |
--------------------------------------------------------------------------------
/add-ons/pmpro-woocommerce/restrict-woocommerce-shop-to-specific-levels.php:
--------------------------------------------------------------------------------
1 | code;
31 | }
32 |
33 | return $data;
34 | }
35 | add_filter( 'pmproz_after_checkout_data', 'my_pmpro_add_sponsored_code_zapier', 10, 4 );
36 |
--------------------------------------------------------------------------------
/add-ons/pmpro-zapier/send-billing-country-zapier.php:
--------------------------------------------------------------------------------
1 | Add New admin popup.
8 | * layout: snippet
9 | * collection: admin-pages
10 | * category: membership-levels
11 | *
12 | * You can add this recipe to your site by creating a custom plugin
13 | * or using the Code Snippets plugin available for free in the WordPress repository.
14 | * Read this companion article for step-by-step directions on either method.
15 | * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
16 | */
17 |
18 | /**
19 | * Remove the "trial" template or unset all templates from the Membership Levels > Add New popup.
20 | *
21 | */
22 | function remove_template_pmpro_membershiplevels_templates( $level_templates ) {
23 | // Remove the "Trial" level template.
24 | unset( $level_templates['trial'] );
25 |
26 | // Remove all level templates.
27 | //$level_templates = array();
28 |
29 | return $level_templates;
30 | }
31 | add_filter( 'pmpro_membershiplevels_templates', 'remove_template_pmpro_membershiplevels_templates' );
32 |
--------------------------------------------------------------------------------
/block-templates/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/blocks-shortcodes/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/checkout/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/checkout/add-fixed-fee-stripe.php:
--------------------------------------------------------------------------------
1 | initial_payment = $level->initial_payment + 3; //Updates initial payment value
20 | $level->billing_amount = $level->billing_amount + 3; //Updates recurring payment value
21 | }
22 | }
23 | return $level;
24 | }
25 | add_filter( "pmpro_checkout_level", "my_pmpro_checkout_level" );
26 |
--------------------------------------------------------------------------------
/checkout/add-new-default-currency.php:
--------------------------------------------------------------------------------
1 | information to your site for you.';
18 | }
19 |
20 | add_action( 'pmpro_checkout_before_submit_button', 'add_text_before_submit' );
21 |
--------------------------------------------------------------------------------
/checkout/adjust-default-currency-format.php:
--------------------------------------------------------------------------------
1 | __( 'Danish Krone', 'paid-memberships-pro' ),
28 | 'decimals' => '2',
29 | 'thousands_separator' => ' ',
30 | 'decimal_separator' => ',',
31 | 'symbol' => 'DKK ',
32 | 'position' => 'left',
33 | );
34 |
35 | return $pmpro_currencies;
36 |
37 | }
38 | add_filter( 'pmpro_currencies', 'pmpro_eu_dkk_format' );
39 |
--------------------------------------------------------------------------------
/checkout/customize-membership-confirmation-message.php:
--------------------------------------------------------------------------------
1 | This is a new confirmation message.';
18 |
19 | return $confirmation_message;
20 | }
21 | add_filter( 'pmpro_confirmation_message', 'my_pmpro_confirmation_message', 15, 2 );
22 |
--------------------------------------------------------------------------------
/checkout/hide-confirm-email-password.php:
--------------------------------------------------------------------------------
1 | id, $user_id ) ) {
28 | $sql_query = "SELECT UNIX_TIMESTAMP(startdate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . esc_sql( $user_id ) . "' AND status = 'active' ORDER BY id LIMIT 1";
29 | $old_timestamp = $wpdb->get_var( $sql_query );
30 |
31 | if ( ! empty( $old_timestamp ) ) {
32 | $startdate = gmdate( 'Y-m-d H:i:s', $old_timestamp );
33 | }
34 | }
35 |
36 | return $startdate;
37 | }
38 | add_action( 'pmpro_checkout_start_date', 'my_pmpro_checkout_start_date', 15, 3 );
39 |
--------------------------------------------------------------------------------
/checkout/load-css-for-checkout-page.php:
--------------------------------------------------------------------------------
1 | id ); // Get level ID.
26 |
27 | if ( is_page( $pmpro_pages['checkout'] ) && $level_id === 1 ) {
28 | ?>
29 |
33 | id ) ) {
26 | if ( $pmpro_level->id == 1 ) {
27 | $tospage = 53; // change this
28 | } else {
29 | $tospage = 55;
30 | }
31 | }
32 |
33 | return $tospage;
34 | }
35 | add_filter( 'option_pmpro_tospage', 'my_option_pmpro_tospage' );
36 |
--------------------------------------------------------------------------------
/checkout/modify-level-price-based-selections.php:
--------------------------------------------------------------------------------
1 | initial_payment = $level->initial_payment + 100;
22 | //$level->billing_amount = $level->billing_amount + 100; //to update recurring payments too
23 | }
24 |
25 | return $level;
26 | }
27 | add_filter( "pmpro_checkout_level", "my_pmpro_checkout_level" );
28 |
--------------------------------------------------------------------------------
/checkout/redirect-members-unique-confirmation-page-checkout-level.php:
--------------------------------------------------------------------------------
1 | id ) {
19 | $rurl = 'http://example.com/page_1';
20 | } elseif ( '2' === $pmpro_level->id ) {
21 | $rurl = 'http://example.com/page_2';
22 | } elseif ( '3' === $pmpro_level->id ) {
23 | $rurl = 'http://example.com/page_3';
24 | }
25 |
26 | return $rurl;
27 |
28 | }
29 |
30 | add_filter( 'pmpro_confirmation_url', 'my_pmpro_confirmation_url', 10, 3 );
31 |
--------------------------------------------------------------------------------
/checkout/remove-custom-trial-for-existing-members.php:
--------------------------------------------------------------------------------
1 | id != '9' ) {
25 | return $level;
26 | }
27 |
28 | $level->trial_limit = '0';
29 | $level->trial_amount = '0';
30 |
31 | return $level;
32 | }
33 | add_filter( 'pmpro_checkout_level', 'my_pmpro_level_adjustment', 10, 1 );
34 |
--------------------------------------------------------------------------------
/checkout/run-order-creation-checks-before-user-creation.php:
--------------------------------------------------------------------------------
1 | gateway ) {
23 | return;
24 | }
25 |
26 | if ( isset( $_REQUEST['payment_type']) && 'other' !== $_REQUEST['payment_type'] ) {
27 | $order->payment_type = esc_attr( $_REQUEST['payment_type'] );
28 | }
29 |
30 | $order->saveOrder();
31 | }
32 | add_action( 'pmpro_added_order', 'my_pmpro_add_payment_type_to_order' );
33 |
--------------------------------------------------------------------------------
/checkout/set-display-name-to-username-new-user-array.php:
--------------------------------------------------------------------------------
1 | id;
31 |
32 | // Check if the user's current membership level is the same for checking out.
33 | if ( pmpro_hasMembershipLevel( $level_id ) ) {
34 | $okay = false;
35 | pmpro_setMessage( 'This is your current membership level. Please select a different membership level.', 'pmpro_error' );
36 | }
37 |
38 | return $okay;
39 |
40 | }
41 | add_filter( 'pmpro_registration_checks', 'stop_members_from_renewing', 10, 1 );
42 |
--------------------------------------------------------------------------------
/checkout/terms-of-service-show-todays-date.php:
--------------------------------------------------------------------------------
1 | data['membership_id'] ) === 5 ) {
26 | $admin_email = 'someemail@email.com';
27 | }
28 |
29 | // Add BCC only if the email isn't already going to the admin.
30 | if ( $email->email !== get_bloginfo( 'admin_email' ) ) {
31 | $headers[] = 'Bcc: ' . $admin_email;
32 | }
33 |
34 | return $headers;
35 | }
36 | add_filter( 'pmpro_email_headers', 'my_pmpro_email_headers', 10, 2 );
--------------------------------------------------------------------------------
/email/bcc-email-addresses-on-notifications.php:
--------------------------------------------------------------------------------
1 | template, '_admin' ) !== false ) {
24 | $headers[] = 'Bcc:' . 'otheremail@domain.com';
25 | // $headers[] = 'Bcc:' . 'otheremail@domain.com,two@domain.com,three@domain.com'; //Example with multiple BCC emails
26 | }
27 |
28 | return $headers;
29 | }
30 | add_filter( 'pmpro_email_headers', 'my_pmpro_email_headers_admin_emails', 10, 2 );
31 |
--------------------------------------------------------------------------------
/email/change-pmpro-email-subjects.php:
--------------------------------------------------------------------------------
1 | template == 'checkout_free' ) {
19 | $subject = 'Thank you, ' . $email->data["name"] . ', for using ' . get_bloginfo( 'name' );
20 | }
21 |
22 | return $subject;
23 | }
24 |
25 | add_filter( 'pmpro_email_subject', 'my_pmpro_email_subject', 10, 2 );
26 |
--------------------------------------------------------------------------------
/email/disable-all-pmpro-email.php:
--------------------------------------------------------------------------------
1 | data['user_login']);
21 | $levels = pmpro_getMembershipLevelsForUser( $user->ID );
22 | $level_ids = empty( $levels ) ? array() : wp_list_pluck( $levels, 'id' );
23 |
24 | if ( in_array( '1', $level_ids ) ) {
25 | return null;
26 | }
27 |
28 | return $recipient;
29 | }
30 | add_filter( 'pmpro_email_recipient', 'my_pmpro_disable_member_emails', 10, 2 );
31 |
--------------------------------------------------------------------------------
/email/pmpro-email-headers-member-email.php:
--------------------------------------------------------------------------------
1 | email != get_bloginfo( 'admin_email' ) ) {
19 | $headers[] = 'Bcc:' . get_bloginfo( 'admin_email' );
20 | }
21 |
22 | return $headers;
23 | }
24 | add_filter( 'pmpro_email_headers', 'my_pmpro_email_headers', 10, 2 );
25 |
--------------------------------------------------------------------------------
/email/remove-user-fields-from-admin-email.php:
--------------------------------------------------------------------------------
1 | sendAdminActivity( 'day', 'example1@email.com' );
21 |
22 | // Send an additional weekly activity email on Mondays to example2@email.com.
23 | if ( 'Mon' === date( 'D' ) ) {
24 | $admin_activity_email->sendAdminActivity( 'week', 'example2@email.com' );
25 | }
26 | }
27 | add_action( 'pmpro_schedule_daily', 'my_pmpro_send_additional_admin_activity_emails' ); // PMPro versions with Action Scheduler
28 | add_action( 'pmpro_cron_admin_activity_email', 'my_pmpro_send_additional_admin_activity_emails', 12 ); // PMPro versions before Action Scheduler
29 |
--------------------------------------------------------------------------------
/email/send-additional-recurring-payment-reminder-emails.php:
--------------------------------------------------------------------------------
1 | 'membership_recurring',
18 | 3 => 'membership_recurring',
19 | );
20 | return $emails;
21 | }
22 | add_filter( 'pmpro_upcoming_recurring_payment_reminder', 'my_pmpro_upcoming_recurring_payment_reminder', 10 );
23 |
--------------------------------------------------------------------------------
/frontend-pages/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/frontend-pages/add-data-invoice-bullets.php:
--------------------------------------------------------------------------------
1 | ID, 'company', true );
21 |
22 | // Add if meta is available
23 | if ( ! empty( $company ) ) {
24 | ?>
25 | Company:
26 | Attribute for SEO
4 | *
5 | * title: Add Level Name to Membership Checkout Attribute for SEO
6 | * layout: snippet
7 | * collection: frontend-pages
8 | * category: seo
9 | * link: https://www.paidmembershipspro.com/add-level-name-to-membership-checkout-page-title-for-seo/
10 | *
11 | * You can add this recipe to your site by creating a custom plugin
12 | * or using the Code Snippets plugin available for free in the WordPress repository.
13 | * Read this companion article for step-by-step directions on either method.
14 | * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
15 | */
16 | function my_pmpro_membership_checkout_title_parts( $title_parts ) {
17 | global $pmpro_pages, $pmpro_level;
18 |
19 | if ( ! empty( $pmpro_pages ) && is_page( $pmpro_pages['checkout'] ) && ! empty( $pmpro_level ) ) {
20 | $title_parts['title'] = $pmpro_level->name . ' – ' . $title_parts['title'];
21 | }
22 |
23 | return $title_parts;
24 | }
25 | add_filter( 'document_title_parts', 'my_pmpro_membership_checkout_title_parts', 20 );
26 |
--------------------------------------------------------------------------------
/frontend-pages/add-level-name-checkout-title-seo.php:
--------------------------------------------------------------------------------
1 | name;
23 | }
24 | return $title;
25 | }
26 | add_filter( 'the_title', 'my_pmpro_membership_checkout_page_title', 10, 2 );
27 |
--------------------------------------------------------------------------------
/frontend-pages/add-members-links-to-members-account-page.php:
--------------------------------------------------------------------------------
1 | format here ?>
23 | My Member Link Top
24 | format here ?>
34 | My Member Link Bottom
35 | My Memberships section.
4 | *
5 | * title: Add Member Action links on the Membership Account Page
6 | * layout: snippet
7 | * collection: frontend-pages
8 | * category: membership-action-links
9 | * link: https://www.paidmembershipspro.com/add-custom-links-to-my-memberships-dashboard/
10 | *
11 | * You can add this recipe to your site by creating a custom plugin
12 | * or using the Code Snippets plugin available for free in the WordPress repository.
13 | * Read this companion article for step-by-step directions on either method.
14 | * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
15 | */
16 |
17 | function my_pmpro_member_action_links( $links, $level_id ) {
18 | // Check if the member is on Level 2.
19 | if ( $level_id == 2 ) {
20 | // Add an Upgrade link to checkout for Level 3.
21 | $links['upgrade'] = '' . esc_html__( 'Upgrade to Pro Membership', 'my-text-domain' ) . ' ';
22 | }
23 |
24 | // Example: Add a bonus link for Level ID 3.
25 | if ( $level_id == 3 ) {
26 | $links['bonuses'] = '' . esc_html__( 'View Your Exclusive Bonuses', 'my-text-domain' ) . ' ';
27 | }
28 |
29 | return $links;
30 | }
31 | add_filter( 'pmpro_member_action_links', 'my_pmpro_member_action_links', 10, 2 );
32 |
--------------------------------------------------------------------------------
/frontend-pages/add-pmpro-level-id-to-body-class.php:
--------------------------------------------------------------------------------
1 | tag's "class" attribute.
4 | *
5 | * title: AAdd the member's level ID to the tag's "class" attribute.
6 | * layout: snippet
7 | * collection: frontend-pages
8 | * category: css
9 | * link: https://www.paidmembershipspro.com/add-the-members-level-id-to-the-body-class-for-level-specific-css-styles/
10 | *
11 | * You can add this recipe to your site by creating a custom plugin
12 | * or using the Code Snippets plugin available for free in the WordPress repository.
13 | * Read this companion article for step-by-step directions on either method.
14 | * https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
15 | */
16 | function add_pmpro_level_id_to_body_class( $classes ) {
17 | global $current_user;
18 | if ( function_exists( 'pmpro_hasMembershipLevel' ) && pmpro_hasMembershipLevel() ) {
19 | $classes[] = 'pmpro-body-has-level-' . $current_user->membership_level->ID;
20 | }
21 | return $classes;
22 | }
23 | add_filter( 'body_class', 'add_pmpro_level_id_to_body_class' );
24 |
--------------------------------------------------------------------------------
/frontend-pages/add-user-id-to-members-account-page.php:
--------------------------------------------------------------------------------
1 | Member ID: ' . $current_user->ID . '';
19 | }
20 | add_action( 'pmpro_account_bullets_top', 'pmpro_add_user_id_account' );
21 |
--------------------------------------------------------------------------------
/frontend-pages/filter-pmpro-levels-page-levels.php:
--------------------------------------------------------------------------------
1 | $level ) {
22 | if ( ! in_array( $level->id, $hiddenlevels ) ) {
23 | $newlevels[ $key ] = $level;
24 | }
25 | }
26 | return $newlevels;
27 | }
28 | add_filter( 'pmpro_levels_array', 'my_pmpro_levels_array' );
29 |
--------------------------------------------------------------------------------
/frontend-pages/remove-profile-action-links.php:
--------------------------------------------------------------------------------
1 | ' . get_avatar( $current_user->ID, 160 ) . '';
18 | }
19 | add_action( 'pmpro_account_bullets_top', 'show_gravatar_pmpro_account_bullets_top' );
20 |
21 | function show_gravatar_pmpro_account_bullets_bottom() {
22 | echo '' . __( 'Avatar', 'pmpro' ) . ': ' . __( 'Update at Gravatar.com', 'pmpro' ) . ' ';
23 | }
24 | add_action( 'pmpro_account_bullets_bottom', 'show_gravatar_pmpro_account_bullets_bottom' );
25 |
--------------------------------------------------------------------------------
/frontend-pages/show-membership-number-on-invoice-page.php:
--------------------------------------------------------------------------------
1 | user->ID, 'member_number', true );
28 |
29 | // If no member number, create one.
30 | if ( empty( $member_number ) )
31 | $member_number = generate_member_number( $pmpro_invoice->user->ID );
32 |
33 | // Show the member number.
34 | if ( ! empty( $member_number ) ) { ?>
35 | :
36 | Member ID: ' . $current_user->ID . '';
21 | }
22 | add_action( 'pmpro_account_bullets_top', 'pmpro_add_user_id_account' );
--------------------------------------------------------------------------------
/import-export/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/integration-compatibility/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/integration-compatibility/my-pmpro-load-shortcode-for-bricks.php:
--------------------------------------------------------------------------------
1 | 'levels',
26 | 'pmpro_billing' => 'billing',
27 | 'pmpro_cancel' => 'cancel',
28 | 'pmpro_checkout' => 'checkout',
29 | 'pmpro_confirmation'=> 'confirmation',
30 | 'pmpro_invoice' => 'invoice'
31 | ];
32 |
33 | foreach ( $pmpro_shortcodes as $shortcode => $template ) {
34 | if ( ! shortcode_exists( $shortcode ) ) {
35 | add_shortcode( $shortcode, function() use ( $template ) {
36 | require_once PMPRO_DIR . "/preheaders/{$template}.php";
37 | return pmpro_loadTemplate( $template, 'local', 'pages' );
38 | });
39 | }
40 | }
41 | }
42 | add_action( 'plugins_loaded', 'my_pmpro_force_register_shortcodes' );
--------------------------------------------------------------------------------
/integration-compatibility/pmpro-elementor-allow-access-for-admins.php:
--------------------------------------------------------------------------------
1 |
13 | [memberlite_accordion]
14 | [memberlite_accordion_item title="Accordion Item Title 1"]This is the first item in the list.[/memberlite_accordion_item]
15 | [memberlite_accordion_item title="Accordion Item Title 2"]This is the second item in the list.[/memberlite_accordion_item]
16 | [memberlite_accordion_item title="Accordion Item Title 3"]This is the third item in the list.[/memberlite_accordion_item]
17 | [memberlite_accordion_item title="Accordion Item Title 4"]This is the fourth item in the list.[/memberlite_accordion_item]
18 | [memberlite_accordion_item title="Accordion Item Title 5"]This is the fifth item in the list.[/memberlite_accordion_item]
19 | [/memberlite_accordion]
20 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-button.php:
--------------------------------------------------------------------------------
1 |
13 | [memberlite_btn style="success" href="/blog/" text="Success Button" target="self"]
14 |
15 | [memberlite_btn style="alert" href="/blog/" text="Alert Button" target="self"]
16 |
17 | [memberlite_btn style="error" href="/blog/" text="Error Button" target="self"]
18 |
19 | [memberlite_btn style="info" href="/blog/" text="Info Button" target="self"]
20 |
21 | [memberlite_btn style="link" href="/blog/" text="Link Button" target="self"]
22 |
23 | [memberlite_btn style="default" href="/blog/" text="Default Button" target="self"]
24 |
25 | [memberlite_btn style="primary" href="/blog/" text="Primary Button" target="self"]
26 |
27 | [memberlite_btn style="secondary" href="/blog/" text="Secondary Button" target="self"]
28 |
29 | [memberlite_btn style="action" href="/blog/" text="Action Button" target="self"]
30 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-columns.php:
--------------------------------------------------------------------------------
1 |
13 |
14 | [row]
15 | [col medium="4" class="bg_secondary"]
16 |
17 | 1/3 column
18 |
19 | [/col]
20 | [col medium="8" class="bg_primary"]
21 |
22 | 2/3 column
23 |
24 | [/col]
25 | [/row]
26 |
27 | [row]
28 | [col medium="6" class="bg_action"]
29 |
30 | 1/2 column
31 |
32 | [/col]
33 | [col medium="6" class="bg_primary"]
34 |
35 | 1/2 column
36 |
37 | [/col]
38 | [/row]
39 |
40 | [row]
41 | [col medium="6" medium_offset="3" class="bg_primary"]
42 |
43 | 1/2 centered column
44 |
45 | [/col]
46 | [/row]
47 |
48 | [row]
49 | [col medium="6" class="bg_primary"]
50 |
51 | 1/2 column
52 |
53 | [/col]
54 | [col medium="6" class="bg_primary"]
55 |
56 | [row_row]
57 | [col_col medium="4" class="bg_secondary"]
58 |
59 | Nested column
60 |
61 | [/col_col]
62 | [col_col medium="8" class="bg_action"]
63 |
64 | Nested column
65 |
66 | [/col_col]
67 | [/row_row]
68 |
69 | [/col]
70 | [/row]
71 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-font-awesome-icon.php:
--------------------------------------------------------------------------------
1 |
13 | [fa icon="heart" animate="beat"]
14 |
15 | [fa icon="sync" animate="spin"]
16 |
17 | [fa icon="arrow-right" rotate="90"]
18 |
19 | [fa icon="check-circle" color="success" size="lg"]
20 |
21 | [fa icon="exclamation-circle" color="error" size="2x"]
22 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-message.php:
--------------------------------------------------------------------------------
1 |
13 | [memberlite_msg style="default" text="Default Message"]
14 |
15 | [memberlite_msg style="success" text="Success Message"]
16 |
17 | [memberlite_msg style="alert" text="Alert Message"]
18 |
19 | [memberlite_msg style="error" text="Error Message"]
20 |
21 | [memberlite_msg style="info" text="Info Message"]
22 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-recent-posts.php:
--------------------------------------------------------------------------------
1 |
13 | [memberlite_recent_posts count="2" title="Recent Updates From Our Blog" subtitle="Recent posts to help you design, grow, and optimize your membership site." category_id="1"]
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-subpagelist.php:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 | [memberlite_subpagelist post_parent="255585" link="true" orderby="title" order="ASC" show="excerpt"]
16 |
17 |
18 | [memberlite_subpagelist link="false" show="content"]
19 |
20 |
21 | [memberlite_subpagelist meta_key="featured" link="true" link_text="" show="none" post_parent="-1"]
22 |
--------------------------------------------------------------------------------
/memberlite/memberlite-shortcodes-example-tabs.php:
--------------------------------------------------------------------------------
1 |
13 |
14 | [memberlite_tabs items="Step 1,Step 2,Step 3"]
15 | [memberlite_tab item="Step 1"]
16 |
17 | Step 1: Create Account
18 | Click the button below to register. You will receive a welcome email with next steps.
19 |
20 | [/memberlite_tab]
21 | [memberlite_tab item="Step 2"]
22 |
23 | Step 2: Complete Profile
24 | Add a profile photo, bio, and any social links so other members can connect with you.
25 |
26 | [/memberlite_tab]
27 | [memberlite_tab item="Step 3"]
28 |
29 | Step 3: Explore Features
30 | Visit your member dashboard to access exclusive content, join discussions, and manage your account.
31 |
32 | [/memberlite_tab]
33 | [/memberlite_tabs]
34 |
--------------------------------------------------------------------------------
/memberlite/memberlite-sitewide-signup-banner-example-1.php:
--------------------------------------------------------------------------------
1 | ID, '_memberlite_banner_bottom', true );
21 | if( ( ! is_user_logged_in() || pmpro_hasMembershipLevel( 1 ) ) && empty( $memberlite_banner_bottom ) ) {
22 | ?>
23 |
24 |
25 |
26 |
Show Your Support for Our Community!
27 |
Your Membership helps fund non-profit projects and spread our message of hope.
28 |
29 |
30 |
31 |
32 |
33 |
34 | ID ) ) {
22 |
23 | $new_elements = array();
24 |
25 | foreach ( $elements as $key => $element ) {
26 |
27 | $include = true;
28 |
29 | foreach ( $premium_elements as $premium_element ) {
30 | if ( ! isset( $element[1] ) || $element[1] == $premium_element ) {
31 | $include = false;
32 | break;
33 | }
34 | }
35 |
36 | if ( $include ) {
37 | $new_elements[] = $element;
38 | }
39 | }
40 |
41 | $elements = $new_elements;
42 | }
43 |
44 | return $elements;
45 | }
46 | add_filter( 'pmpro_member_profile_elements', 'my_pmpro_hide_show_profile_elements', 10, 2 );
--------------------------------------------------------------------------------
/misc/my-pmpro-assign-level-to-role.php:
--------------------------------------------------------------------------------
1 |
21 | Affiliate Area
22 |
25 | has_cap( 'administrator' ) ) {
25 | remove_action( 'wp_login', 'pmpro_report_login_wp_login', 10, 2 );
26 | }
27 | }
28 | add_action( 'wp_login', 'pmpro_pre_login_check', 9, 2 );
29 |
30 | function pmpro_remove_visits_check() {
31 | if ( current_user_can( 'administrator' ) ) {
32 | remove_action( 'wp', 'pmpro_report_login_wp_visits' );
33 | }
34 | }
35 | add_action( 'wp', 'pmpro_remove_visits_check', 9 );
36 |
--------------------------------------------------------------------------------
/misc/pmpro_has_membership_access_filter_for_authors.php:
--------------------------------------------------------------------------------
1 | post_author == $myuser->ID ) {
18 | $hasaccess = true;
19 | }
20 |
21 | return $hasaccess;
22 | }
23 | add_filter( 'pmpro_has_membership_access_filter', 'my_pmpro_has_membership_access_filter_for_authors', 30, 4 );
24 |
--------------------------------------------------------------------------------
/misc/redirect-member-on-login.php:
--------------------------------------------------------------------------------
1 | ID ) ) {
18 | $redirect_to = '/members/';
19 | }
20 |
21 | return $redirect_to;
22 | }
23 | add_filter( 'pmpro_login_redirect_url', 'my_pmpro_login_redirect_url', 10, 3 );
24 |
--------------------------------------------------------------------------------
/misc/redirect-member-on-logout.php:
--------------------------------------------------------------------------------
1 | ID, "pmpro_email_confirmation_key", true );
21 |
22 | if ( $validated != 'validated' && !empty( $validated ) ) {
23 | return new WP_Error( 'user_not_verified', 'User has not validated their email' );
24 | }
25 |
26 | return $user;
27 | }
28 |
29 | add_filter( 'wp_authenticate_user', 'my_pmpro_check_login', 10, 2 );
--------------------------------------------------------------------------------
/misc/restrict-user-login-to-active-members.php:
--------------------------------------------------------------------------------
1 | roles ) ) {
30 | return $user;
31 | }
32 |
33 | $membership_levels = pmpro_getMembershipLevelsForUser( $user->ID );
34 |
35 | //No membership level assigned - no login allowed
36 | if ( empty( $membership_levels ) ) {
37 | return;
38 | }
39 |
40 | return $user;
41 |
42 | }
43 | add_filter( 'authenticate', 'my_pmpro_validate_membership_login', 99, 3 );
--------------------------------------------------------------------------------
/misc/show-membership-level-for-comment-author.php:
--------------------------------------------------------------------------------
1 | ID ) ) {
30 | $level = pmpro_getMembershipLevelForUser( $user->ID );
31 | $author_text = $author_text . ' (' . $level->name . ')';
32 | }
33 |
34 | return $author_text;
35 | }
36 | add_filter( 'comment_author', 'my_comment_author_show_membership_level', 10, 2 );
--------------------------------------------------------------------------------
/orders/add-mycred-points-whenever-order-created.php:
--------------------------------------------------------------------------------
1 | status, array( '', 'success' ) ) ) {
21 | return;
22 | }
23 |
24 | $level_id = intval( $order->membership_id );
25 | $user_id = intval( $order->user_id );
26 | $points = 10; // default to 0 points.
27 | $reference = 'Successful Membership Payment';
28 | $entry = 'Paid Memberships Pro - level: ' . $level_id;
29 |
30 | switch ( $level_id ) {
31 | case 1:
32 | $points = 20;
33 | break;
34 | case 2:
35 | $points = 15;
36 | break;
37 | }
38 |
39 | // Add points to my cred
40 | mycred_add( $reference, $user_id, $points, $entry );
41 |
42 | // Write to order notes.
43 | $order->notes .= ' MyCred points for this order: ' . $points;
44 | $order->saveOrder();
45 | }
46 | add_action( 'pmpro_added_order', 'add_my_cred_to_pmpro_orders', 10, 1 );
47 |
--------------------------------------------------------------------------------
/payment-gateways/authorize.net/authorizenet-sent-ip.php:
--------------------------------------------------------------------------------
1 | membership_id, $order->user_id );
28 | }
29 | add_action("pmpro_subscription_payment_failed", "my_pmpro_subscription_payment_failed");
30 |
--------------------------------------------------------------------------------
/payment-gateways/stripe/adjust-stripe-connect-fee.php:
--------------------------------------------------------------------------------
1 | id, 'stripe_checkout_session_id', true );
24 | if ( empty( $stripe_checkout_session_id ) ) {
25 | return;
26 | }
27 |
28 | ?>
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | user_id ); // defaults to site locale if user has no locale set.
21 |
22 | // Convert WordPress locale to Stripe locale.
23 | $params['locale'] = strtolower( substr( $wp_locale, 0, 2 ) ); // Example: convert 'pl_PL' to 'pl'.
24 | return $params;
25 | }
26 | add_filter( 'pmpro_stripe_checkout_session_parameters', 'my_pmpro_stripe_checkout_parameters_user_locale', 10, 3 );
27 |
--------------------------------------------------------------------------------
/restricting-content/README.md:
--------------------------------------------------------------------------------
1 | # Snippets Library for Paid Memberships Pro - Template
2 |
3 | This README.md file has been used as a template while setting up the folder structure of this repo.
--------------------------------------------------------------------------------
/restricting-content/allow-access-for-admins.php:
--------------------------------------------------------------------------------
1 | action == 'add' && $screen->base == 'post' && in_array( $screen->post_type, array( 'post', 'page' ) ) ) {
21 | ?>
22 |
26 | You must have one of the following membership levels to access this content: !!levels!!
";
17 | return $body;
18 | }
19 | add_filter( 'pmpro_no_access_message_body', 'my_pmpro_custom_no_access_message_body', 10, 2 );
20 |
--------------------------------------------------------------------------------
/restricting-content/filter-pmpro-no-access-message-header.php:
--------------------------------------------------------------------------------
1 | ID, null, true );
21 | $level_ids = $access[1];
22 |
23 | if ( is_array( $level_ids ) && in_array( 2, $level_ids ) ) {
24 | $text = 'This page requires a Bronze Account of higher. Upgrade Now »
';
25 | } elseif ( is_array( $level_ids ) && in_array( 3, $level_ids ) ) {
26 | $text = 'This page requires a Silver Account or higher. Upgrade Now »
';
27 | } else {
28 | $text = 'This page requires a Gold Account or higher. Upgrade Now »
';
29 | }
30 |
31 | return $text;
32 | }
33 | add_filter( 'pmpro_non_member_text_filter', 'my_pmpro_non_member_text_filter', 5 );
34 |
--------------------------------------------------------------------------------
/restricting-content/lock-down-everything-but-homepage.php:
--------------------------------------------------------------------------------
1 | ID
24 | && ! is_home()
25 | && ! is_page( $okay_pages )
26 | && ! strpos( $_SERVER['REQUEST_URI'], 'login' ) ) {
27 | wp_redirect( home_url( 'wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ) ) );
28 | } elseif ( is_page()
29 | && ! is_home()
30 | && ! is_page( $okay_pages )
31 | && ! $current_user->membership_level->ID ) {
32 | wp_redirect( home_url() );
33 | }
34 | }
35 | add_action( 'template_redirect', 'my_template_redirect' );
36 |
--------------------------------------------------------------------------------
/restricting-content/lockdown-everything-except-homepage.php:
--------------------------------------------------------------------------------
1 | found_posts === 0 ) {
20 | global $pmpro_pages; // Assuming $pmpro_pages is a global variable
21 | $redirect_url = get_permalink($pmpro_pages['levels']);
22 | if ( $redirect_url ) {
23 | wp_redirect( $redirect_url );
24 | exit;
25 | }
26 | }
27 | }
28 | }
29 | add_action( 'template_redirect', 'pmpro_category_no_results_redirect' );
30 |
--------------------------------------------------------------------------------
/restricting-content/redirect-non-members-away-from-member-content.php:
--------------------------------------------------------------------------------
1 | first_name ) ) {
21 | $errors[] = 'Please enter a first name.';
22 | }
23 | }
24 | add_action( 'pmpro_user_profile_update_errors', 'pmpro_make_profile_fields_required', 10, 3 );
25 |
--------------------------------------------------------------------------------
/user-fields/save-function-add-user-field-filter.php:
--------------------------------------------------------------------------------
1 | name ) {
20 | // Add save function for our field.
21 | $field->save_function = 'custom_callback_function_name'; // Set to your callback function name.
22 | }
23 |
24 | return $field;
25 | }
26 | add_filter( 'pmpro_add_user_field', 'my_pmpro_user_field_add_save_function_example', 10, 2 );
27 |
28 | // Custom callback function
29 | function custom_callback_function_name( $field_value ) {
30 | // Do something
31 | }
32 |
--------------------------------------------------------------------------------
/user-fields/update-price-by-conditional-user-field.php:
--------------------------------------------------------------------------------
1 | initial_payment = $level->initial_payment + 100;
24 | //$level->billing_amount = $level->billing_amount + 100; //to update recurring payments too
25 | }
26 |
27 | return $level;
28 | }
29 | add_filter("pmpro_checkout_level", "my_pmpro_checkout_level");
--------------------------------------------------------------------------------