Version Description
- Changed the "Edit Member" button text to "Save Data" in the admin member edit interface.
- Added a new function to logout the user from the swpm system if the corresponding wp user session is logged out.
- The company name field will now be shown in the edit profile form.
- The stripe button configuration allows you to enable an option to collect billing address
- The country field is now a dropdown option.
- Added a filter hook for the paypal email address in the payment button.
Download this release
Release Info
Developer | mra13 |
Plugin | Simple Membership |
Version | 3.5.8 |
Comparing to | |
See all releases |
Code changes from version 3.5.7 to 3.5.8
- classes/class.simple-wp-membership.php +7 -0
- classes/class.swpm-utils-misc.php +74 -5
- classes/class.swpm-wp-loaded-tasks.php +32 -0
- css/swpm.common.css +4 -1
- readme.txt +764 -756
- simple-wp-membership.php +2 -2
- views/admin_edit.php +1 -1
- views/admin_member_form_common_part.php +60 -60
- views/edit.php +5 -1
- views/payments/payment-gateway/admin_stripe_buy_now_button.php +41 -18
- views/payments/payment-gateway/admin_stripe_subscription_button.php +9 -0
- views/payments/payment-gateway/paypal_button_shortcode_view.php +2 -2
- views/payments/payment-gateway/stripe_button_shortcode_view.php +24 -4
classes/class.simple-wp-membership.php
CHANGED
@@ -6,6 +6,7 @@ include_once('class.swpm-utils-member.php');
|
|
6 |
include_once('class.swpm-utils-membership-level.php');
|
7 |
include_once('class.swpm-utils-template.php');
|
8 |
include_once('class.swpm-init-time-tasks.php');
|
|
|
9 |
include_once('class.swpm-comment-form-related.php');
|
10 |
include_once('class.swpm-settings.php');
|
11 |
include_once('class.swpm-protection.php');
|
@@ -35,6 +36,7 @@ class SimpleWpMembership {
|
|
35 |
public function __construct() {
|
36 |
add_action('admin_menu', array(&$this, 'menu'));
|
37 |
add_action('init', array(&$this, 'init_hook'));
|
|
|
38 |
|
39 |
add_filter('the_content', array(&$this, 'filter_content'), 20, 1);
|
40 |
add_filter('widget_text', 'do_shortcode');
|
@@ -507,6 +509,11 @@ class SimpleWpMembership {
|
|
507 |
$init_tasks->do_init_tasks();
|
508 |
}
|
509 |
|
|
|
|
|
|
|
|
|
|
|
510 |
public function admin_library() {
|
511 |
//Only loaded on selective swpm admin menu page rendering.
|
512 |
$this->common_library();
|
6 |
include_once('class.swpm-utils-membership-level.php');
|
7 |
include_once('class.swpm-utils-template.php');
|
8 |
include_once('class.swpm-init-time-tasks.php');
|
9 |
+
include_once('class.swpm-wp-loaded-tasks.php');
|
10 |
include_once('class.swpm-comment-form-related.php');
|
11 |
include_once('class.swpm-settings.php');
|
12 |
include_once('class.swpm-protection.php');
|
36 |
public function __construct() {
|
37 |
add_action('admin_menu', array(&$this, 'menu'));
|
38 |
add_action('init', array(&$this, 'init_hook'));
|
39 |
+
add_action('wp_loaded', array(&$this, 'handle_wp_loaded_tasks'));
|
40 |
|
41 |
add_filter('the_content', array(&$this, 'filter_content'), 20, 1);
|
42 |
add_filter('widget_text', 'do_shortcode');
|
509 |
$init_tasks->do_init_tasks();
|
510 |
}
|
511 |
|
512 |
+
public function handle_wp_loaded_tasks(){
|
513 |
+
$wp_loaded_tasks = new SwpmWpLoadedTasks();
|
514 |
+
$wp_loaded_tasks->do_wp_loaded_tasks();
|
515 |
+
}
|
516 |
+
|
517 |
public function admin_library() {
|
518 |
//Only loaded on selective swpm admin menu page rendering.
|
519 |
$this->common_library();
|
classes/class.swpm-utils-misc.php
CHANGED
@@ -165,7 +165,7 @@ class SwpmMiscUtils {
|
|
165 |
public static function get_current_page_url() {
|
166 |
$pageURL = 'http';
|
167 |
|
168 |
-
if (isset($_SERVER['SCRIPT_URI']) && !empty($_SERVER['SCRIPT_URI'])){
|
169 |
return $_SERVER['SCRIPT_URI'];
|
170 |
}
|
171 |
|
@@ -174,7 +174,7 @@ class SwpmMiscUtils {
|
|
174 |
}
|
175 |
$pageURL .= "://";
|
176 |
if (isset($_SERVER["SERVER_PORT"]) && ($_SERVER["SERVER_PORT"] != "80") && ($_SERVER["SERVER_PORT"] != "443")) {
|
177 |
-
$pageURL .= ltrim($_SERVER["SERVER_NAME"], ".*") . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
|
178 |
} else {
|
179 |
$pageURL .= ltrim($_SERVER["SERVER_NAME"], ".*") . $_SERVER["REQUEST_URI"];
|
180 |
}
|
@@ -209,11 +209,11 @@ class SwpmMiscUtils {
|
|
209 |
$primary_address .= "\n" . $user_record->country;
|
210 |
}
|
211 |
}
|
212 |
-
|
213 |
//Format some field values
|
214 |
$member_since_formatted = SwpmUtils::get_formatted_date_according_to_wp_settings($user_record->member_since);
|
215 |
$subsc_starts_formatted = SwpmUtils::get_formatted_date_according_to_wp_settings($user_record->subscription_starts);
|
216 |
-
|
217 |
|
218 |
//Define the replacable tags
|
219 |
$tags = array("{member_id}", "{user_name}", "{first_name}", "{last_name}", "{membership_level}",
|
@@ -334,5 +334,74 @@ class SwpmMiscUtils {
|
|
334 |
|
335 |
return $formatted_content;
|
336 |
}
|
337 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
}
|
165 |
public static function get_current_page_url() {
|
166 |
$pageURL = 'http';
|
167 |
|
168 |
+
if (isset($_SERVER['SCRIPT_URI']) && !empty($_SERVER['SCRIPT_URI'])) {
|
169 |
return $_SERVER['SCRIPT_URI'];
|
170 |
}
|
171 |
|
174 |
}
|
175 |
$pageURL .= "://";
|
176 |
if (isset($_SERVER["SERVER_PORT"]) && ($_SERVER["SERVER_PORT"] != "80") && ($_SERVER["SERVER_PORT"] != "443")) {
|
177 |
+
$pageURL .= ltrim($_SERVER["SERVER_NAME"], ".*") . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
|
178 |
} else {
|
179 |
$pageURL .= ltrim($_SERVER["SERVER_NAME"], ".*") . $_SERVER["REQUEST_URI"];
|
180 |
}
|
209 |
$primary_address .= "\n" . $user_record->country;
|
210 |
}
|
211 |
}
|
212 |
+
|
213 |
//Format some field values
|
214 |
$member_since_formatted = SwpmUtils::get_formatted_date_according_to_wp_settings($user_record->member_since);
|
215 |
$subsc_starts_formatted = SwpmUtils::get_formatted_date_according_to_wp_settings($user_record->subscription_starts);
|
216 |
+
|
217 |
|
218 |
//Define the replacable tags
|
219 |
$tags = array("{member_id}", "{user_name}", "{first_name}", "{last_name}", "{membership_level}",
|
334 |
|
335 |
return $formatted_content;
|
336 |
}
|
337 |
+
|
338 |
+
public static function get_countries_dropdown($country = '') {
|
339 |
+
$countries = array("Afghanistan", "Albania", "Algeria", "Andorra",
|
340 |
+
"Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Australia",
|
341 |
+
"Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados",
|
342 |
+
"Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia",
|
343 |
+
"Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria",
|
344 |
+
"Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde",
|
345 |
+
"Central African Republic", "Chad", "Chile", "China", "Colombi", "Comoros",
|
346 |
+
"Congo (Brazzaville)", "Congo", "Costa Rica", "Cote d\'Ivoire", "Croatia",
|
347 |
+
"Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica",
|
348 |
+
"Dominican Republic", "East Timor (Timor Timur)", "Ecuador", "Egypt",
|
349 |
+
"El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia",
|
350 |
+
"Fiji", "Finland", "France", "Gabon", "Gambia, The", "Georgia", "Germany",
|
351 |
+
"Ghana", "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau",
|
352 |
+
"Guyana", "Haiti", "Honduras", "Hungary", "Iceland", "India", "Indonesia",
|
353 |
+
"Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan",
|
354 |
+
"Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait",
|
355 |
+
"Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya",
|
356 |
+
"Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Madagascar",
|
357 |
+
"Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
|
358 |
+
"Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", "Monaco",
|
359 |
+
"Mongolia", "Montenegro", "Morocco", "Mozambique", "Myanmar", "Namibia",
|
360 |
+
"Nauru", "Nepa", "Netherlands", "New Zealand", "Nicaragua", "Niger", "Nigeria",
|
361 |
+
"Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay",
|
362 |
+
"Peru", "Philippines", "Poland", "Portugal", "Qatar", "Romania", "Russia", "Rwanda",
|
363 |
+
"Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent", "Samoa", "San Marino",
|
364 |
+
"Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles",
|
365 |
+
"Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
|
366 |
+
"Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Suriname",
|
367 |
+
"Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan",
|
368 |
+
"Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia",
|
369 |
+
"Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates",
|
370 |
+
"United Kingdom", "United States of America", "Uruguay", "Uzbekistan", "Vanuatu",
|
371 |
+
"Vatican City", "Venezuela", "Vietnam", "Yemen", "Zambia", "Zimbabwe");
|
372 |
+
//let's try to "guess" country name
|
373 |
+
$curr_lev = -1;
|
374 |
+
$guess_country = '';
|
375 |
+
foreach ($countries as $country_name) {
|
376 |
+
similar_text(strtolower($country), strtolower($country_name), $lev);
|
377 |
+
if ($lev >= $curr_lev) {
|
378 |
+
//this is closest match so far
|
379 |
+
$curr_lev = $lev;
|
380 |
+
$guess_country = $country_name;
|
381 |
+
}
|
382 |
+
if ($curr_lev == 100) {
|
383 |
+
//exact match
|
384 |
+
break;
|
385 |
+
}
|
386 |
+
}
|
387 |
+
if ($curr_lev <= 80) {
|
388 |
+
// probably bad guess
|
389 |
+
$guess_country = '';
|
390 |
+
}
|
391 |
+
$countries_dropdown = '';
|
392 |
+
//let's add "(Please select)" option
|
393 |
+
$countries_dropdown .= "\r\n" . '<option value=""' . ($country == '' ? ' selected' : '') . '>' . SwpmUtils::_('(Please Select)') . '</option>';
|
394 |
+
if ($guess_country == '' && $country != '') {
|
395 |
+
//since we haven't guessed the country name, let's add current value to the options
|
396 |
+
$countries_dropdown .= "\r\n" . '<option value="' . $country . '" selected>' . $country . '</option>';
|
397 |
+
}
|
398 |
+
if ($guess_country != '') {
|
399 |
+
$country = $guess_country;
|
400 |
+
}
|
401 |
+
foreach ($countries as $country_name) {
|
402 |
+
$countries_dropdown .= "\r\n" . '<option value="' . $country_name . '"' . (strtolower($country_name) == strtolower($country) ? ' selected' : '') . '>' . $country_name . '</option>';
|
403 |
+
}
|
404 |
+
return $countries_dropdown;
|
405 |
+
}
|
406 |
+
|
407 |
}
|
classes/class.swpm-wp-loaded-tasks.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SwpmWpLoadedTasks {
|
4 |
+
|
5 |
+
public function __construct() {
|
6 |
+
|
7 |
+
}
|
8 |
+
|
9 |
+
/*
|
10 |
+
* This is triggered after all plugins, themes and WP has loaded.
|
11 |
+
* It is triggered after init, plugins_loaded etc.
|
12 |
+
*/
|
13 |
+
public function do_wp_loaded_tasks() {
|
14 |
+
$this->synchronise_swpm_logout_for_wp_users();
|
15 |
+
|
16 |
+
}
|
17 |
+
|
18 |
+
/*
|
19 |
+
* Logs out the user from the swpm session if they are logged out of the WP user session
|
20 |
+
*/
|
21 |
+
public function synchronise_swpm_logout_for_wp_users() {
|
22 |
+
if (!is_user_logged_in()) {
|
23 |
+
/* WP user is logged out. So logout the SWPM user (if applicable) */
|
24 |
+
if (SwpmMemberUtils::is_member_logged_in()) {
|
25 |
+
/* SWPM user is logged in the system. Log him out. */
|
26 |
+
SwpmLog::log_auth_debug("synchronise_swpm_logout_for_wp_users() - WP user session is logged out for this user. So logging out of the swpm session also.", true);
|
27 |
+
wp_logout();
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
}
|
css/swpm.common.css
CHANGED
@@ -131,7 +131,10 @@
|
|
131 |
}
|
132 |
|
133 |
/* Edit profile form CSS */
|
134 |
-
.swpm-edit-profile-form input[type="text"], .swpm-edit-profile-form input[type="password"]{
|
|
|
|
|
|
|
135 |
width: 95%;
|
136 |
}
|
137 |
.swpm-edit-profile-submit-section{
|
131 |
}
|
132 |
|
133 |
/* Edit profile form CSS */
|
134 |
+
.swpm-edit-profile-form input[type="text"], .swpm-edit-profile-form input[type="password"] {
|
135 |
+
width: 95%;
|
136 |
+
}
|
137 |
+
.swpm-edit-profile-form select {
|
138 |
width: 95%;
|
139 |
}
|
140 |
.swpm-edit-profile-submit-section{
|
readme.txt
CHANGED
@@ -1,756 +1,764 @@
|
|
1 |
-
=== Simple Membership ===
|
2 |
-
Contributors: smp7, wp.insider
|
3 |
-
Donate link: https://simple-membership-plugin.com/
|
4 |
-
Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
|
5 |
-
Requires at least: 4.0
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 3.5.
|
8 |
-
License: GPLv2 or later
|
9 |
-
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
-
|
11 |
-
Simple membership plugin adds membership functionality to your site. Protect members only content using content protection easily.
|
12 |
-
|
13 |
-
== Description ==
|
14 |
-
|
15 |
-
= A flexible, well-supported, and easy-to-use WordPress membership plugin for offering free and premium content from your WordPress site =
|
16 |
-
|
17 |
-
The simple membership plugin lets you protect your posts and pages so only your members can view the protected content.
|
18 |
-
|
19 |
-
= Unlimited Membership Access Levels =
|
20 |
-
Set up unlimited membership levels (example: free, silver, gold etc) and protect your posts and pages using the membership levels you create.
|
21 |
-
|
22 |
-
= User Friendly Interface for Content Protection =
|
23 |
-
When you are editing a post or page in the WordPress editor, you can select to protect that post or page for your members.
|
24 |
-
|
25 |
-
Non-members viewing a protected page will be prompted to login or become a member.
|
26 |
-
|
27 |
-
= Have Free and Paid Memberships =
|
28 |
-
You can configure it to have free and/or paid memberships on your site. Paid membership payment is handled securely via PayPal.
|
29 |
-
|
30 |
-
Both one time and recurring/subscription payments are supported.
|
31 |
-
|
32 |
-
You can also accept one time membership payment via Stripe or Braintree payment gateway.
|
33 |
-
|
34 |
-
= Membership Payments Log =
|
35 |
-
All the payments from your members are recorded in the plugin. You can view them anytime by visiting the payments menu from the admin dashboard.
|
36 |
-
|
37 |
-
= Member Login Widget on The Sidebar =
|
38 |
-
You can easily add a member login widget on the sidebar of your site. Simply use the login form shortcode in the sidebar widget.
|
39 |
-
|
40 |
-
You can also customize the member login widget by creating a custom template file in your theme (or child theme) folder.
|
41 |
-
|
42 |
-
= Documentation =
|
43 |
-
|
44 |
-
Read the [setup documentation](https://simple-membership-plugin.com/simple-membership-documentation/) after you install the plugin to get started.
|
45 |
-
|
46 |
-
= Plugin Support =
|
47 |
-
|
48 |
-
If you have any issue with this plugin, please visit the plugin site and post it on the support forum or send us a contact:
|
49 |
-
https://simple-membership-plugin.com/
|
50 |
-
|
51 |
-
You can create a free forum user account and ask your questions.
|
52 |
-
|
53 |
-
= Miscellaneous =
|
54 |
-
|
55 |
-
* Works with any WordPress theme.
|
56 |
-
* Ability to protect photo galleries.
|
57 |
-
* Ability to protect attachment pages.
|
58 |
-
* Show teaser content to convert visitors into members.
|
59 |
-
* Comments on your protected posts will also be protected automatically.
|
60 |
-
* There is an option to enable debug logging so you can troubleshoot membership payment related issues easily (if any).
|
61 |
-
* Ability to customize the content protection message that gets shown to non-members.
|
62 |
-
* Ability to partially protect post or page content.
|
63 |
-
* You can apply protection to posts and pages in bulk.
|
64 |
-
* Ability to use merge vars in the membership email notification.
|
65 |
-
* Membership management side is handled by the plugin.
|
66 |
-
* Ability to manually approve your members.
|
67 |
-
* Ability to import WordPress users as members.
|
68 |
-
* Filter members list by account status.
|
69 |
-
* Can be translated to any language.
|
70 |
-
* Hide the admin toolbar from the frontend of your site.
|
71 |
-
* Allow your members to delete their membership accounts.
|
72 |
-
* Send quick notification email to your members.
|
73 |
-
* Customize the password reset email for members.
|
74 |
-
* Use Google reCAPTCHA on your member registration form.
|
75 |
-
* Use Google reCAPTCHA on your member login and password reset form.
|
76 |
-
* The login and registration widgets will be responsive if you are using a responsive theme.
|
77 |
-
* Ability to restrict the commenting feature on your site to your members only.
|
78 |
-
* Front-end member registration page.
|
79 |
-
* Front-end member profiles.
|
80 |
-
* Front-end member login page.
|
81 |
-
|
82 |
-
= Language Translations =
|
83 |
-
|
84 |
-
The following language translations are already available:
|
85 |
-
|
86 |
-
* English
|
87 |
-
* German
|
88 |
-
* French
|
89 |
-
* Spanish
|
90 |
-
* Spanish (Venezuela)
|
91 |
-
* Chinese
|
92 |
-
* Portuguese (Brazil)
|
93 |
-
* Portuguese (Portugal)
|
94 |
-
* Swedish
|
95 |
-
* Macedonian
|
96 |
-
* Polish
|
97 |
-
* Turkish
|
98 |
-
* Russian
|
99 |
-
* Dutch (Netherlands)
|
100 |
-
* Dutch (Belgium)
|
101 |
-
* Romanian
|
102 |
-
* Danish
|
103 |
-
* Lithuanian
|
104 |
-
* Serbian
|
105 |
-
* Japanese
|
106 |
-
* Greek
|
107 |
-
* Latvian
|
108 |
-
* Indonesian
|
109 |
-
* Hebrew
|
110 |
-
* Catalan
|
111 |
-
* Hungarian
|
112 |
-
* Bosnian (Bosnia and Herzegovina)
|
113 |
-
* Slovak
|
114 |
-
* Italian
|
115 |
-
* Norwegian
|
116 |
-
* Mexican
|
117 |
-
* Arabic
|
118 |
-
* Czech
|
119 |
-
* Finnish
|
120 |
-
|
121 |
-
You can translate the plugin using the language [translation documentation](https://simple-membership-plugin.com/translate-simple-membership-plugin/).
|
122 |
-
|
123 |
-
== Installation ==
|
124 |
-
|
125 |
-
Do the following to install the membership plugin:
|
126 |
-
|
127 |
-
1. Upload the 'simple-wp-membership.zip' file from the Plugins->Add New page in the WordPress administration panel.
|
128 |
-
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
129 |
-
|
130 |
-
== Frequently Asked Questions ==
|
131 |
-
|
132 |
-
None.
|
133 |
-
|
134 |
-
== Screenshots ==
|
135 |
-
|
136 |
-
Please visit the memberhsip plugin page to view screenshots:
|
137 |
-
https://simple-membership-plugin.com/
|
138 |
-
|
139 |
-
== Changelog ==
|
140 |
-
|
141 |
-
= 3.5.
|
142 |
-
-
|
143 |
-
-
|
144 |
-
-
|
145 |
-
|
146 |
-
|
147 |
-
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
-
|
153 |
-
|
154 |
-
= 3.5.
|
155 |
-
-
|
156 |
-
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
-
|
165 |
-
|
166 |
-
|
167 |
-
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
-
|
173 |
-
|
174 |
-
|
175 |
-
-
|
176 |
-
|
177 |
-
|
178 |
-
-
|
179 |
-
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
-
|
186 |
-
-
|
187 |
-
-
|
188 |
-
|
189 |
-
|
190 |
-
-
|
191 |
-
|
192 |
-
|
193 |
-
- The password
|
194 |
-
|
195 |
-
|
196 |
-
-
|
197 |
-
-
|
198 |
-
-
|
199 |
-
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
-
|
205 |
-
-
|
206 |
-
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
-
|
211 |
-
-
|
212 |
-
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
-
|
218 |
-
-
|
219 |
-
-
|
220 |
-
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
-
|
226 |
-
- Added a new
|
227 |
-
- Added
|
228 |
-
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
-
|
234 |
-
- Added
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
-
|
240 |
-
|
241 |
-
|
242 |
-
-
|
243 |
-
|
244 |
-
|
245 |
-
- Added
|
246 |
-
- Added
|
247 |
-
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
- Deleted the
|
252 |
-
-
|
253 |
-
-
|
254 |
-
-
|
255 |
-
-
|
256 |
-
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
-
|
262 |
-
- The
|
263 |
-
-
|
264 |
-
|
265 |
-
|
266 |
-
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
-
|
276 |
-
-
|
277 |
-
-
|
278 |
-
|
279 |
-
= 3.3.
|
280 |
-
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
-
|
285 |
-
-
|
286 |
-
|
287 |
-
|
288 |
-
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
-
|
293 |
-
-
|
294 |
-
-
|
295 |
-
- Added
|
296 |
-
-
|
297 |
-
|
298 |
-
= 3.3.
|
299 |
-
-
|
300 |
-
-
|
301 |
-
|
302 |
-
|
303 |
-
-
|
304 |
-
-
|
305 |
-
|
306 |
-
= 3.
|
307 |
-
-
|
308 |
-
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
-
|
313 |
-
|
314 |
-
|
315 |
-
-
|
316 |
-
-
|
317 |
-
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
- Added a
|
323 |
-
- Added a
|
324 |
-
-
|
325 |
-
-
|
326 |
-
-
|
327 |
-
|
328 |
-
= 3.2.
|
329 |
-
- Added
|
330 |
-
-
|
331 |
-
- Added
|
332 |
-
-
|
333 |
-
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
-
|
342 |
-
|
343 |
-
= 3.2.
|
344 |
-
- Added a new
|
345 |
-
|
346 |
-
-
|
347 |
-
|
348 |
-
|
349 |
-
-
|
350 |
-
|
351 |
-
|
352 |
-
-
|
353 |
-
-
|
354 |
-
|
355 |
-
|
356 |
-
-
|
357 |
-
-
|
358 |
-
-
|
359 |
-
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
-
|
365 |
-
-
|
366 |
-
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
-
|
371 |
-
- Added
|
372 |
-
-
|
373 |
-
-
|
374 |
-
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
- Added new
|
380 |
-
-
|
381 |
-
-
|
382 |
-
-
|
383 |
-
- Added
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
- Added
|
388 |
-
-
|
389 |
-
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
-
|
395 |
-
- Added
|
396 |
-
-
|
397 |
-
-
|
398 |
-
|
399 |
-
|
400 |
-
- Added
|
401 |
-
|
402 |
-
|
403 |
-
- Added
|
404 |
-
-
|
405 |
-
-
|
406 |
-
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
-
|
412 |
-
- Added
|
413 |
-
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
-
|
418 |
-
-
|
419 |
-
|
420 |
-
|
421 |
-
-
|
422 |
-
|
423 |
-
|
424 |
-
-
|
425 |
-
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
-
|
430 |
-
-
|
431 |
-
|
432 |
-
|
433 |
-
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
-
|
442 |
-
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
-
|
449 |
-
|
450 |
-
|
451 |
-
- Fixed
|
452 |
-
|
453 |
-
|
454 |
-
- Added
|
455 |
-
-
|
456 |
-
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
-
|
462 |
-
-
|
463 |
-
|
464 |
-
|
465 |
-
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
-
|
470 |
-
-
|
471 |
-
|
472 |
-
= 3.0.
|
473 |
-
-
|
474 |
-
|
475 |
-
|
476 |
-
- Added
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
-
|
482 |
-
-
|
483 |
-
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
- Added
|
488 |
-
-
|
489 |
-
-
|
490 |
-
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
- Added a new
|
495 |
-
-
|
496 |
-
|
497 |
-
|
498 |
-
- Added a new
|
499 |
-
|
500 |
-
|
501 |
-
- Updated the
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
-
|
507 |
-
-
|
508 |
-
-
|
509 |
-
-
|
510 |
-
|
511 |
-
= 2.2.
|
512 |
-
-
|
513 |
-
-
|
514 |
-
-
|
515 |
-
|
516 |
-
|
517 |
-
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
-
|
530 |
-
|
531 |
-
= 2.2.
|
532 |
-
-
|
533 |
-
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
- Added
|
543 |
-
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
-
|
551 |
-
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
- Fixed
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
-
|
577 |
-
|
578 |
-
= 2.1.
|
579 |
-
-
|
580 |
-
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
-
|
585 |
-
|
586 |
-
= 2.1 =
|
587 |
-
-
|
588 |
-
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
-
|
608 |
-
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
-
|
615 |
-
-
|
616 |
-
|
617 |
-
|
618 |
-
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
- Fixed an issue with the
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
-
|
638 |
-
|
639 |
-
= 1.
|
640 |
-
- Fixed
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
- Added a new
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
- Added
|
654 |
-
-
|
655 |
-
|
656 |
-
= 1.8.
|
657 |
-
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
-
|
662 |
-
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
-
|
670 |
-
-
|
671 |
-
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
-
|
678 |
-
|
679 |
-
|
680 |
-
- Added
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
-
|
690 |
-
-
|
691 |
-
|
692 |
-
= 1.7.
|
693 |
-
-
|
694 |
-
-
|
695 |
-
|
696 |
-
|
697 |
-
-
|
698 |
-
-
|
699 |
-
|
700 |
-
= 1.7.
|
701 |
-
- Fixed an issue with
|
702 |
-
|
703 |
-
|
704 |
-
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
- Fixed an issue with
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
-
|
716 |
-
|
717 |
-
|
718 |
-
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
-
|
723 |
-
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
-
|
728 |
-
|
729 |
-
|
730 |
-
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
-
|
738 |
-
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
-
|
748 |
-
|
749 |
-
= 1.
|
750 |
-
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Simple Membership ===
|
2 |
+
Contributors: smp7, wp.insider
|
3 |
+
Donate link: https://simple-membership-plugin.com/
|
4 |
+
Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
|
5 |
+
Requires at least: 4.0
|
6 |
+
Tested up to: 4.9
|
7 |
+
Stable tag: 3.5.8
|
8 |
+
License: GPLv2 or later
|
9 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
+
|
11 |
+
Simple membership plugin adds membership functionality to your site. Protect members only content using content protection easily.
|
12 |
+
|
13 |
+
== Description ==
|
14 |
+
|
15 |
+
= A flexible, well-supported, and easy-to-use WordPress membership plugin for offering free and premium content from your WordPress site =
|
16 |
+
|
17 |
+
The simple membership plugin lets you protect your posts and pages so only your members can view the protected content.
|
18 |
+
|
19 |
+
= Unlimited Membership Access Levels =
|
20 |
+
Set up unlimited membership levels (example: free, silver, gold etc) and protect your posts and pages using the membership levels you create.
|
21 |
+
|
22 |
+
= User Friendly Interface for Content Protection =
|
23 |
+
When you are editing a post or page in the WordPress editor, you can select to protect that post or page for your members.
|
24 |
+
|
25 |
+
Non-members viewing a protected page will be prompted to login or become a member.
|
26 |
+
|
27 |
+
= Have Free and Paid Memberships =
|
28 |
+
You can configure it to have free and/or paid memberships on your site. Paid membership payment is handled securely via PayPal.
|
29 |
+
|
30 |
+
Both one time and recurring/subscription payments are supported.
|
31 |
+
|
32 |
+
You can also accept one time membership payment via Stripe or Braintree payment gateway.
|
33 |
+
|
34 |
+
= Membership Payments Log =
|
35 |
+
All the payments from your members are recorded in the plugin. You can view them anytime by visiting the payments menu from the admin dashboard.
|
36 |
+
|
37 |
+
= Member Login Widget on The Sidebar =
|
38 |
+
You can easily add a member login widget on the sidebar of your site. Simply use the login form shortcode in the sidebar widget.
|
39 |
+
|
40 |
+
You can also customize the member login widget by creating a custom template file in your theme (or child theme) folder.
|
41 |
+
|
42 |
+
= Documentation =
|
43 |
+
|
44 |
+
Read the [setup documentation](https://simple-membership-plugin.com/simple-membership-documentation/) after you install the plugin to get started.
|
45 |
+
|
46 |
+
= Plugin Support =
|
47 |
+
|
48 |
+
If you have any issue with this plugin, please visit the plugin site and post it on the support forum or send us a contact:
|
49 |
+
https://simple-membership-plugin.com/
|
50 |
+
|
51 |
+
You can create a free forum user account and ask your questions.
|
52 |
+
|
53 |
+
= Miscellaneous =
|
54 |
+
|
55 |
+
* Works with any WordPress theme.
|
56 |
+
* Ability to protect photo galleries.
|
57 |
+
* Ability to protect attachment pages.
|
58 |
+
* Show teaser content to convert visitors into members.
|
59 |
+
* Comments on your protected posts will also be protected automatically.
|
60 |
+
* There is an option to enable debug logging so you can troubleshoot membership payment related issues easily (if any).
|
61 |
+
* Ability to customize the content protection message that gets shown to non-members.
|
62 |
+
* Ability to partially protect post or page content.
|
63 |
+
* You can apply protection to posts and pages in bulk.
|
64 |
+
* Ability to use merge vars in the membership email notification.
|
65 |
+
* Membership management side is handled by the plugin.
|
66 |
+
* Ability to manually approve your members.
|
67 |
+
* Ability to import WordPress users as members.
|
68 |
+
* Filter members list by account status.
|
69 |
+
* Can be translated to any language.
|
70 |
+
* Hide the admin toolbar from the frontend of your site.
|
71 |
+
* Allow your members to delete their membership accounts.
|
72 |
+
* Send quick notification email to your members.
|
73 |
+
* Customize the password reset email for members.
|
74 |
+
* Use Google reCAPTCHA on your member registration form.
|
75 |
+
* Use Google reCAPTCHA on your member login and password reset form.
|
76 |
+
* The login and registration widgets will be responsive if you are using a responsive theme.
|
77 |
+
* Ability to restrict the commenting feature on your site to your members only.
|
78 |
+
* Front-end member registration page.
|
79 |
+
* Front-end member profiles.
|
80 |
+
* Front-end member login page.
|
81 |
+
|
82 |
+
= Language Translations =
|
83 |
+
|
84 |
+
The following language translations are already available:
|
85 |
+
|
86 |
+
* English
|
87 |
+
* German
|
88 |
+
* French
|
89 |
+
* Spanish
|
90 |
+
* Spanish (Venezuela)
|
91 |
+
* Chinese
|
92 |
+
* Portuguese (Brazil)
|
93 |
+
* Portuguese (Portugal)
|
94 |
+
* Swedish
|
95 |
+
* Macedonian
|
96 |
+
* Polish
|
97 |
+
* Turkish
|
98 |
+
* Russian
|
99 |
+
* Dutch (Netherlands)
|
100 |
+
* Dutch (Belgium)
|
101 |
+
* Romanian
|
102 |
+
* Danish
|
103 |
+
* Lithuanian
|
104 |
+
* Serbian
|
105 |
+
* Japanese
|
106 |
+
* Greek
|
107 |
+
* Latvian
|
108 |
+
* Indonesian
|
109 |
+
* Hebrew
|
110 |
+
* Catalan
|
111 |
+
* Hungarian
|
112 |
+
* Bosnian (Bosnia and Herzegovina)
|
113 |
+
* Slovak
|
114 |
+
* Italian
|
115 |
+
* Norwegian
|
116 |
+
* Mexican
|
117 |
+
* Arabic
|
118 |
+
* Czech
|
119 |
+
* Finnish
|
120 |
+
|
121 |
+
You can translate the plugin using the language [translation documentation](https://simple-membership-plugin.com/translate-simple-membership-plugin/).
|
122 |
+
|
123 |
+
== Installation ==
|
124 |
+
|
125 |
+
Do the following to install the membership plugin:
|
126 |
+
|
127 |
+
1. Upload the 'simple-wp-membership.zip' file from the Plugins->Add New page in the WordPress administration panel.
|
128 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
129 |
+
|
130 |
+
== Frequently Asked Questions ==
|
131 |
+
|
132 |
+
None.
|
133 |
+
|
134 |
+
== Screenshots ==
|
135 |
+
|
136 |
+
Please visit the memberhsip plugin page to view screenshots:
|
137 |
+
https://simple-membership-plugin.com/
|
138 |
+
|
139 |
+
== Changelog ==
|
140 |
+
|
141 |
+
= 3.5.8 =
|
142 |
+
- Changed the "Edit Member" button text to "Save Data" in the admin member edit interface.
|
143 |
+
- Added a new function to logout the user from the swpm system if the corresponding wp user session is logged out.
|
144 |
+
- The company name field will now be shown in the edit profile form.
|
145 |
+
- The stripe button configuration allows you to enable an option to collect billing address
|
146 |
+
- The country field is now a dropdown option.
|
147 |
+
- Added a filter hook for the paypal email address in the payment button.
|
148 |
+
|
149 |
+
= 3.5.7 =
|
150 |
+
- Added updated German translation file.
|
151 |
+
- Fixed a permissions check bug (thanks to Neb).
|
152 |
+
- Fixed a potential XSS vulnerability.
|
153 |
+
|
154 |
+
= 3.5.6 =
|
155 |
+
- Russian Ruble (₽) currency added for PayPal Buy Now and Subscription buttons.
|
156 |
+
- "Return URL" and "Button Image URL" options for Stripe Subscription button are now properly saved and handled.
|
157 |
+
- Stripe Subscription is now automatically cancelled when a member deletes his account. Will not work for members registered prior to this update.
|
158 |
+
|
159 |
+
= 3.5.5 =
|
160 |
+
- Updated the language text domain from "swpm" to "simple-membership". This will make it easy for the translation to be handled via https://translate.wordpress.org/
|
161 |
+
|
162 |
+
= 3.5.4 =
|
163 |
+
- Added a check for PHP5.4 to detect if a server is using very old version of PHP and show an appropriate warning message. This will prevent an error on server's using old PHP version.
|
164 |
+
- Added a new feature in the paypal button configuration so you can specify a custom checkout page header/logo.
|
165 |
+
|
166 |
+
= 3.5.3 =
|
167 |
+
- The login widget now shows a link to the edit profile page (for the logged in members).
|
168 |
+
- Applied a fix in the validation JS code that was preventing paid membership registration to be completed properly if the email field was skipped.
|
169 |
+
- Added Stripe subscription checkout option.
|
170 |
+
|
171 |
+
= 3.5.2 =
|
172 |
+
- There is a new feature to apply protection to posts and pages in bulk. The following documentation explains how to use this feature:
|
173 |
+
https://simple-membership-plugin.com/apply-protection-posts-pages-bulk/
|
174 |
+
|
175 |
+
- Added a new utility function in the SwpmMemberUtils class.
|
176 |
+
|
177 |
+
= 3.5.1 =
|
178 |
+
- Added a new action hook (swpm_before_login_request_is_processed) that can be used to check stuff before the login request is processed by the plugin.
|
179 |
+
- Stripe button: zero-decimal currencies (like JPY) are no longer multiplied by 100.
|
180 |
+
- Turned off autocomplete for the email input field in the registration and edit profile forms.
|
181 |
+
|
182 |
+
= 3.5.0 =
|
183 |
+
- Updated the Spanish language translation file.
|
184 |
+
- Added translation for Spanish (Venezuela). Translation was done by Santos Guerra.
|
185 |
+
- Improved the current page URL check for the renewal page.
|
186 |
+
- The {member_since} and {subscription_starts} email merge tags will output a formatted date value.
|
187 |
+
- Turned off autocomplete in the edit profile's password field.
|
188 |
+
|
189 |
+
= 3.4.9 =
|
190 |
+
- Fixed a member profile edit issue that was introduced in the previous version from JavaScript library update.
|
191 |
+
|
192 |
+
= 3.4.8 =
|
193 |
+
- The password reset form will be hidden after a successful reset request.
|
194 |
+
- Added a new utility function to write array content to the debug log file.
|
195 |
+
- Added apply_filters() for all email subjects and bodies. This should be useful for a multi-lingual site.
|
196 |
+
- Updated the validation JS library to the latest.
|
197 |
+
- Updated the French language translation file.
|
198 |
+
- Updated the Spanish language translation file.
|
199 |
+
- Added Czech language translation to the plugin. The translation was submitted by Novakovska Eva.
|
200 |
+
- Added Finnish language translation to the plugin. The translation was submitted by Lars Timberg.
|
201 |
+
- The password field in the edit profile page has been changed to a "password" type field.
|
202 |
+
|
203 |
+
= 3.4.7 =
|
204 |
+
- There is a new feature for applying partial or section protection to posts and pages. This feature is available via a free addon.
|
205 |
+
- Removed bundled jquery.tools18.min.js, switched to built-in WP jQuery UI.
|
206 |
+
- Fixed a typo in the manage content protection menu tab.
|
207 |
+
- Created a free addon for misc shortcodes.
|
208 |
+
|
209 |
+
= 3.4.6 =
|
210 |
+
- Added Arabic language translation to the plugin. The translation was submitted by Hanin Fatani.
|
211 |
+
- Added an email tag {primary_address} that can be used in the notification email when address field is used in the form builder addon.
|
212 |
+
- Removed the unnecessary $_SERVER["REQUEST_URI"] value from the post action.
|
213 |
+
- Added reCAPTCHA support on the password reset form (for reCAPTCHA addon).
|
214 |
+
- Added an option to specify a custom CSS class for Stripe and Braintree buttons to customize the button style. (The new shortcode parameter is "class").
|
215 |
+
|
216 |
+
= 3.4.5 =
|
217 |
+
- Added a new action hook that gets triggered when a member is added via the "Add Member" menu of admin dashboard.
|
218 |
+
- The mailchimp addon will now add users to a list when added via the admin dashboard.
|
219 |
+
- The paypal checkout custom field value will be encoded.
|
220 |
+
- Fixed warning - Non-static method SimpleWpMembership::deactivate() should not be called statically.
|
221 |
+
|
222 |
+
= 3.4.4 =
|
223 |
+
- Updated the Spanish language translation file.
|
224 |
+
- The {password} email merge tag will work in the admin notification email when a member submits the registration form.
|
225 |
+
- Excluded the disable dashboard feature check from AJAX request.
|
226 |
+
- Added a new filter to allow overriding of the registration complete email dynamically using custom code.
|
227 |
+
- Added a placeholder text message for the password field in the "Edit Profile" page.
|
228 |
+
- Added a new settings field to allow customization of the "Admin Notification Email Subject".
|
229 |
+
- The manage members menu can be sorted using first name and last name.
|
230 |
+
- Minor typo fix.
|
231 |
+
|
232 |
+
= 3.4.3 =
|
233 |
+
- Improved the formatting for the content that appears before the "more" tag on a more tag protected post.
|
234 |
+
- Added a new feature to disable wp dashboard access for non-admin wp users. You can find this option under the general settings tab.
|
235 |
+
- Added Mexican language translation file. The translation was submitted by Enrique alfonso.
|
236 |
+
- Re-added the local copy of the Spanish translation files (Someone submitted incorrect translation to the translate.wordpress.org site overwriting the good translation)
|
237 |
+
|
238 |
+
= 3.4.2 =
|
239 |
+
- Fixed an issue with some sites getting a blank screen for the members menu due to a PHP short tag usage.
|
240 |
+
- Added a new action hook that gets triggered after a member edits the profile from the edit profile page.
|
241 |
+
- The edit_profile_front_end() function now returns true or false based on if the form was submitted successfully or not.
|
242 |
+
- Added extra comment in the IPN handling code.
|
243 |
+
|
244 |
+
= 3.4.1 =
|
245 |
+
- Added an option to bulk update the "Membership Level" value of a group of members.
|
246 |
+
- Added an option to bulk update the "Access Starts" date value of a group of members.
|
247 |
+
- Added Norwegian language translation file. The translation was submitted by Tom Nordstrønen.
|
248 |
+
|
249 |
+
= 3.4.0 =
|
250 |
+
- Updated the Italian language file. Thanks to Nicolò Monili for updating the translation.
|
251 |
+
- Deleted the German language files from the plugin folder so it can pull the language from translate.wordpress.org
|
252 |
+
- Improved the member search functionality when used with pagination.
|
253 |
+
- Added more sanitization on the registration form.
|
254 |
+
- Added a few utility functions to the membership level utility class.
|
255 |
+
- Google reCAPTCHA addon updated to enable captcha on the login form.
|
256 |
+
- Stripe Checkout: The plugin now sets the "receipt_email" parameter for Stripe checkout so a receipt gets sent from Stripe.
|
257 |
+
|
258 |
+
= 3.3.9 =
|
259 |
+
- Deleted the Spanish language files from the plugin folder so it can pull the language from translate.wordpress.org
|
260 |
+
- WordPress 4.7 compatibility.
|
261 |
+
- Regenerated the POT file.
|
262 |
+
- The after login redirection now uses home_url() instead of site_url(). The URL also gets passed via a filter.
|
263 |
+
- Added a new filter for the after logout redirection URL.
|
264 |
+
- Renamed the swpm-ja_JP language filename to swpmp-ja
|
265 |
+
- Added the Braintree payment gateway so you can accept membership payments using Braintree. Details in the following documentation:
|
266 |
+
https://simple-membership-plugin.com/create-braintree-buy-now-button-for-membership-payment/
|
267 |
+
|
268 |
+
= 3.3.8 =
|
269 |
+
- The account renewal payment will take into account any remaining time (when the user's level is using a duration type expiry).
|
270 |
+
- The members can now user their email address (instead of username) and password to log into the site. The username field of the member login form will accept either the email address or the username.
|
271 |
+
- The set_user_role action hook will not be triggered by the plugin as the wp_update_user() function will take care of it automatically.
|
272 |
+
|
273 |
+
= 3.3.7 =
|
274 |
+
- Added Italian language translation file. The translation was submitted by Roberto Paura.
|
275 |
+
- Improved the paypal refund handling.
|
276 |
+
- The subscription payment cancellation sequence/code has been improved. Details in the following documentation:
|
277 |
+
https://simple-membership-plugin.com/what-happens-when-paypal-subscription-cancelled/
|
278 |
+
|
279 |
+
= 3.3.6 =
|
280 |
+
- Added a new option so the admin notification email content can be customized from the email settings menu of the plugin.
|
281 |
+
|
282 |
+
= 3.3.5 =
|
283 |
+
- Added nonce check on the edit profile form.
|
284 |
+
- Added an extra check for the membership level data on the registration form.
|
285 |
+
- Minimum WordPress version requirement updated to v4.0.
|
286 |
+
|
287 |
+
= 3.3.4 =
|
288 |
+
- If you are editing the post protection settings of a post that belongs to a protected category, it will now show a message in the protection settings box to let you know.
|
289 |
+
- Improved nonce check with the protection settings saving functionality.
|
290 |
+
|
291 |
+
= 3.3.3 =
|
292 |
+
- Improvements for a recurring payment received transaction. It will update the profile even if the membership level setting is using a duration type value.
|
293 |
+
- Fixed CSRF vulnerabilies.
|
294 |
+
- Added nonce verification check in various admin side actions.
|
295 |
+
- Added is_admin() check for various admin side actions.
|
296 |
+
- Added current_user_can() check for various admin side actions.
|
297 |
+
|
298 |
+
= 3.3.2 =
|
299 |
+
- You can now view a member's last accessed date and time value by editing the member's profile from the admin dashboard.
|
300 |
+
- The "Registration Successful" message can now be customized using the custom messages addon.
|
301 |
+
- The edit profile template file can now also be overridden using the swpm_load_template_files filter.
|
302 |
+
- Updated the Dutch language translation file.
|
303 |
+
- Added Estonian language translation file.
|
304 |
+
- Updated the Stripe payment gateway library to the latest version.
|
305 |
+
|
306 |
+
= 3.3.1 =
|
307 |
+
- Added an option in the advanced settings menu to use the timezone value specified in your WordPress General Settings interface.
|
308 |
+
- WordPress 4.6 compatibility.
|
309 |
+
|
310 |
+
= 3.3.0 =
|
311 |
+
- Updated the Hungarian language file.
|
312 |
+
- Improved input sanitization.
|
313 |
+
|
314 |
+
= 3.2.9 =
|
315 |
+
- Lowered the priority of "the_content" filter processing (this should be helpful for compatibility with some of the content builder type plugins).
|
316 |
+
- Added Slovak language translation file. The translation was submitted by Marek Kucak.
|
317 |
+
- XSS vulnerability fix for page request parameter.
|
318 |
+
|
319 |
+
= 3.2.8 =
|
320 |
+
- Added Stripe Buy Now option for membership payment.
|
321 |
+
Stripe payment usage documentation: https://simple-membership-plugin.com/create-stripe-buy-now-button-for-membership-payment/
|
322 |
+
- Added a notice in the admin interface to notify you when you keep the sandbox payment mode enabled.
|
323 |
+
- Added a check in the authentication system to stop login request processing if the user is already logged into the site as ADMIN.
|
324 |
+
- The payment button shortcode will now check to make sure you entered a valid button ID in the shortcode.
|
325 |
+
- Fixed a couple of minor debug notice warnings.
|
326 |
+
- Bugfix: Admin Dashboard Access Permission setting not saving correctly.
|
327 |
+
|
328 |
+
= 3.2.7 =
|
329 |
+
- Added a new option in the plugin settings so you can specify other WP user role (example: editor) to be able to use/see the plugin's admin interface.
|
330 |
+
- Added a "user profile delete" option in the admin profile edit interface of the plugin. Admins can use it to delete a user record while in the member edit interface.
|
331 |
+
- Added a new option so the member registration complete email notification can be sent to multiple site admins.
|
332 |
+
- Added Bosnian language translation file. The translation was submitted by Rejhan Puskar.
|
333 |
+
- Updated the Japanese language file.
|
334 |
+
- Updated the Dutch language file. Thanks to R.H.J. Roelofsen.
|
335 |
+
|
336 |
+
= 3.2.6 =
|
337 |
+
- Added Hungarian language translation file. The translation was submitted by Laura Szitar.
|
338 |
+
- Improved the members menu navigation menu so the tabs are always visible (even when you go to the add or edit members screen).
|
339 |
+
- Added 2 new action hooks (They are triggered when subscription is cancelled and when a recurring payment is received).
|
340 |
+
- Improved the membership levels navigation menu tabs.
|
341 |
+
- The "Edit Member" interface now shows the member ID of the currently editing member.
|
342 |
+
|
343 |
+
= 3.2.5 =
|
344 |
+
- Added a new feature to enable redirection to the last page after login (where they clicked the login link).
|
345 |
+
This new option is available in the after login redirection addon.
|
346 |
+
https://wordpress.org/plugins/simple-membership-after-login-redirection/
|
347 |
+
|
348 |
+
= 3.2.4 =
|
349 |
+
- Fixed a bug with attachment protection showing an error message.
|
350 |
+
|
351 |
+
= 3.2.3 =
|
352 |
+
- Added a new option so you can configure a membership account renewal page in the plugin.
|
353 |
+
- The account expiry message will include the renewal page link (if you configure the renewal page).
|
354 |
+
- Removed login link from the comment protection message. You can customize the comment protection message using the custom message addon.
|
355 |
+
- Updated the Russian language file. Thanks to @dimabuko for updating the language file.
|
356 |
+
- Updated the Portuguese language file. Thanks to @Juan for updating the language file.
|
357 |
+
- Added a new addon for better custom post type protection.
|
358 |
+
- Made an improvement to the wp user delete function.
|
359 |
+
- More tag protection check improvements.
|
360 |
+
- Account with "inactive" status can also log into the site if the "Allows expired login" feature is enabled.
|
361 |
+
- Updated the PayPal IPN validation code so it is compatible with the upcoming PayPal changes.
|
362 |
+
|
363 |
+
= 3.2.2 =
|
364 |
+
- New feature to only allow the members of the site to be able to post a comment.
|
365 |
+
- Moved the "Allow Account Deletion" option to the Advanced Settings tab of the plugin.
|
366 |
+
- Moved the "Auto Delete Pending Account" option to the Advanced Settings tab of the plugin.
|
367 |
+
- WordPress 4.5 compatibility.
|
368 |
+
|
369 |
+
= 3.2.1 =
|
370 |
+
- Added a new filter (swpm_transactions_menu_items_per_page) that can be used to customize the number of items that is listed in the transactions menu.
|
371 |
+
- Added more sorting option in the transactions table.
|
372 |
+
- Added sanitization for the sort inputs in the member transactions table.
|
373 |
+
- Fixed an issue with the auto delete pending account settings.
|
374 |
+
- Changed admin heading structure from h2 to h1.
|
375 |
+
|
376 |
+
= 3.2.0 =
|
377 |
+
- Added Catalan language translation file. The translation was submitted by Josep Ramon.
|
378 |
+
- Custom post type categories are also listed in the category protection menu.
|
379 |
+
- Added a new filter (swpm_members_menu_items_per_page) that can be used to customize the number of items that is listed in the members menu.
|
380 |
+
- The default number of items listed in the members menu by default has been increased to 50.
|
381 |
+
- Comment protection fix for posts using "more" tag.
|
382 |
+
- Comments of protected posts are also protected.
|
383 |
+
- Added CSS classes for all the field rows in the standard membership registration form.
|
384 |
+
- Added CSS classes for all the field rows in the edit profile form.
|
385 |
+
|
386 |
+
= 3.1.9 =
|
387 |
+
- Added new merge vars that can be used in the registration complete email. These are {member_id}, {account_state}, {email}, {member_since}
|
388 |
+
- Added trailingslashit() to the after logout redirect URL.
|
389 |
+
- Created a new extension to show member info. [usage documentation](https://simple-membership-plugin.com/simple-membership-addon-show-member-info/)
|
390 |
+
- A new cookie is dropped when a member logs into the site. It can be used for caching plugin compatibility.
|
391 |
+
- Added a new function to load the template for login widget and password reset form. This will allow customization of the login widget by adding the custom template to the theme folder.
|
392 |
+
|
393 |
+
= 3.1.8 =
|
394 |
+
- Improved the members and payments menu rendering for smaller screen devices.
|
395 |
+
- Added a utility function to easily output a formatted date in the plugin according to the WordPress's date format settings.
|
396 |
+
- Fixed a bug in the wp username and email validation functionality. Thanks to Klaas van der Linden for pointing it out.
|
397 |
+
- The membership password reset form has been restructured (the HTML table has been removed).
|
398 |
+
|
399 |
+
= 3.1.7 =
|
400 |
+
- Added debug logging for after a password is reset successfully.
|
401 |
+
- The plugin will prevent WordPress's default password reset email notification from going out when a member resets the password.
|
402 |
+
- Added a new bulk action item. Activate account and notify members in bulk. Customize the activation email from the email settings menu of the plugin.
|
403 |
+
- Added validation in the bulk operation function to check and make sure that multiple records were selected before trying the bulk action.
|
404 |
+
- Updated the Portuguese (Brazil) language translation file. The translation was updated by Fernando Telles.
|
405 |
+
- Updated the Tools interface of the plugin.
|
406 |
+
- The members list can now be filtered by account status (from the members interface)
|
407 |
+
- The members list now shows "incomplete" keyword in the username field for the member profiles that are incomplete.
|
408 |
+
- Added an "Add Member" tab in the members menu.
|
409 |
+
|
410 |
+
= 3.1.6 =
|
411 |
+
- Added a new feature to show the admin toolbar to admin users only.
|
412 |
+
- Added CSS for membership buy buttons to force their width and height to be auto.
|
413 |
+
- Added a few utility functions to retrieve a member's record from custom PHP code (useful for developers).
|
414 |
+
- Added the free Google recaptcha addon for registration forms.
|
415 |
+
|
416 |
+
= 3.1.5 =
|
417 |
+
- Added a new shortcode [swpm_show_expiry_date] to show the logged-in member's expiry details.
|
418 |
+
- The search feature in the members menu will search the company name, city, state, country fields also.
|
419 |
+
- The subscription profile ID (if any) for subscription payment is now shown in the "payments" interface of the plugin.
|
420 |
+
- Added new filter hook so additional fields can be added to the payment button form (example: specify country or language code).
|
421 |
+
- Updated the language POT file.
|
422 |
+
|
423 |
+
= 3.1.4 =
|
424 |
+
- Added an option in the "Payments" menu to link a payment to the corresponding membership profile (when applicable).
|
425 |
+
- Fixed an issue with the subscriber ID not saving with the member profile (for PayPal subscription payments).
|
426 |
+
- Added Hebrew language translation file. The translation was submitted by Merom Harpaz.
|
427 |
+
|
428 |
+
= 3.1.3 =
|
429 |
+
- Added Indonesian language translation file. The translation was submitted by Hermanudin.
|
430 |
+
- Removed a couple of "notice" warnings from the installer.
|
431 |
+
- Added option to bulk change members account status.
|
432 |
+
- Updated the CSS class for postbox h3 elements.
|
433 |
+
- The member search feature (in the admin side) can now search the list based on email address.
|
434 |
+
|
435 |
+
= 3.1.2 =
|
436 |
+
- Added more sortable columns in the members menu.
|
437 |
+
- Adjusted the CSS for the registration and edit profile forms so they render better in small screen devices.
|
438 |
+
- Changed the "User name" string to "Username"
|
439 |
+
|
440 |
+
= 3.1.1 =
|
441 |
+
- Fix for some special characters in the email not getting decoded correctly.
|
442 |
+
- Updated the membership upgrade email header to use the "from email address" value from the email settings.
|
443 |
+
|
444 |
+
= 3.1.0 =
|
445 |
+
- Fixed an email validation issue for when the plugin is used with the form builder addon.
|
446 |
+
|
447 |
+
= 3.0.9 =
|
448 |
+
- Updated the Spanish language translation file.
|
449 |
+
- Updated the POT file for language translation.
|
450 |
+
- Added Dutch (Belgium) language translation file. The translation was submitted by Johan Calu.
|
451 |
+
- Fixed an email validation issue.
|
452 |
+
|
453 |
+
= 3.0.8 =
|
454 |
+
- Added Latvian language translation file. The translation was submitted by Uldis Kalnins.
|
455 |
+
- Updated the POT file for language translation.
|
456 |
+
- Added a placeholder get_real_ip_addr() function for backwards compatibility.
|
457 |
+
|
458 |
+
= 3.0.7 =
|
459 |
+
- Fixed a typo in the password reset message.
|
460 |
+
- Removed the get_real_ip_addr() function (using get_user_ip_address() from the "SwpmUtils" class).
|
461 |
+
- Simplified the message class interaction.
|
462 |
+
- Added CSS classes to the registration, edit profile and login submit buttons.
|
463 |
+
- Added confirmation in the member's menu bulk operation function.
|
464 |
+
- Fixed the bulk delete and delete functionality in the members list menu.
|
465 |
+
- Fixed the category protection confirmation message.
|
466 |
+
- Added Greek language translation file. The translation was submitted by Christos Papafilopoulos.
|
467 |
+
|
468 |
+
= 3.0.6 =
|
469 |
+
- Corrected the Danish language file name.
|
470 |
+
- Fixed an issue with the profile update success message sticking.
|
471 |
+
|
472 |
+
= 3.0.5 =
|
473 |
+
- Added a fix to prevent an error from showing when a member record is edited from the admin side.
|
474 |
+
|
475 |
+
= 3.0.4 =
|
476 |
+
- Added a new utility function so a member's particular info can be retrieved using this function.
|
477 |
+
- Added extra guard to prevent the following error "Call to member function get () on a non object".
|
478 |
+
- Updated the langguage POT file.
|
479 |
+
|
480 |
+
= 3.0.3 =
|
481 |
+
- Increased the database character limit size of the user_name field.
|
482 |
+
- Refactored the 'swpm_registration_form_override' filter.
|
483 |
+
- Added integration with iDevAffiliate.
|
484 |
+
- Added integration with Affiliate Platform plugin.
|
485 |
+
|
486 |
+
= 3.0.2 =
|
487 |
+
- Added a new shortcode that can be used on your thank you page. This will allow your users to complete paid registration from the thank you page after payment.
|
488 |
+
- The last accessed from IP address of a member is shown to the admin in the member edit screen.
|
489 |
+
- The debug log (if enabled) for authentication request is written to the "log-auth.txt" file.
|
490 |
+
- Fixed a bug with the bulk member delete option from the bottom bulk action form.
|
491 |
+
- Fixed a bug with the bulk membership level delete option from the bottom bulk action form.
|
492 |
+
|
493 |
+
= 3.0.1 =
|
494 |
+
- Added a new CSS class to the registration complete message.
|
495 |
+
- Added Portuguese (Portugal) language translation file. The translation was submitted by Edgar Sprecher.
|
496 |
+
- Replaced mysql_real_escape_string() with esc_sql()
|
497 |
+
- Members list in the admin is now sorted by member_id by default.
|
498 |
+
- Added a new filter in the registration form so Google recaptcha can be added to it.
|
499 |
+
|
500 |
+
= 3.0 =
|
501 |
+
- Updated the swedish langauge translation
|
502 |
+
- Added a new option to enable opening of the PayPal buy button in a new window (using the "new_window" parameter in the shortcode).
|
503 |
+
- You can now create and configure PayPal Subscription button for membership payment from the payments menu.
|
504 |
+
|
505 |
+
= 2.2.9 =
|
506 |
+
- Added a new feature to customize the password reset email.
|
507 |
+
- Added a new feature to customize the admin notification email address.
|
508 |
+
- Improved the help text for a few of the email settings fields.
|
509 |
+
- Updated the message that gets displayed after a member updates the profile.
|
510 |
+
|
511 |
+
= 2.2.8 =
|
512 |
+
- Updated the swedish language translation file.
|
513 |
+
- Code refactoring: moved all the init hook tasks to a separate class.
|
514 |
+
- Increased the size of admin nav tab menu items so they are easy to see.
|
515 |
+
- Made all the admin menu title size consistent accross all the menus.
|
516 |
+
- Updated the admin menu dashicon icon to a nicer looking one.
|
517 |
+
- You can now create and configure PayPal buy now button for membership payment from the payments menu.
|
518 |
+
|
519 |
+
= 2.2.7 =
|
520 |
+
- Added Japanese language translation to the plugin. The translation was submitted by Mana.
|
521 |
+
- Added Serbian language translation to the plugin. The translation was submitted by Zoran Milijanovic.
|
522 |
+
- All member fields will be loaded in the edit page (instead of just two).
|
523 |
+
|
524 |
+
= 2.2.6 =
|
525 |
+
- Fixed an issue with the category protection menu after the class refactoring work.
|
526 |
+
- Fixed the unique key in the DB table
|
527 |
+
|
528 |
+
= 2.2.5 =
|
529 |
+
- Refactored all the class names to use the "swpm" slug to remove potential conflict with other plugins with similar class names.
|
530 |
+
|
531 |
+
= 2.2.4 =
|
532 |
+
- Fixed an issue with not being able to unprotect the category protection.
|
533 |
+
- Minor refactoring work with the classes.
|
534 |
+
|
535 |
+
= 2.2.3 =
|
536 |
+
- Updated the category protection interface to use the get_terms() function.
|
537 |
+
- Added a new Utility class that has some helpful functions (example: check if a member is logged into the site).
|
538 |
+
|
539 |
+
= 2.2.2 =
|
540 |
+
- All the membership payments are now recorded in the payments table.
|
541 |
+
- Added a new menu item (Payments) to show all the membership payments and transactions.
|
542 |
+
- Added Lithuanian language translation to the plugin. The translation was submitted by Daiva Pakalne.
|
543 |
+
- Fixed an invalid argument error.
|
544 |
+
|
545 |
+
= 2.2.1 =
|
546 |
+
- Added a new table for logging the membership payments/transactions in the future.
|
547 |
+
- Made some enhancements in the installer class so it can handle both the WP Multi-site and single site setup via the same function.
|
548 |
+
|
549 |
+
= 2.2 =
|
550 |
+
- Added a new feature to allow expired members to be able to log into the system (to allow easy account renewal).
|
551 |
+
- The email address value of a member is now editable from the admin dashboard and in the profile edit form.
|
552 |
+
- Added CSS classes around some of the messages for styling purpose.
|
553 |
+
- Some translation updates.
|
554 |
+
|
555 |
+
= 2.1.9 =
|
556 |
+
- Improved the password reset functionality.
|
557 |
+
- Improved the message that gets displayed after the password reset functionality is used.
|
558 |
+
- Updated the Portuguese (Brazil) language file.
|
559 |
+
- Improved the user login handling code.
|
560 |
+
|
561 |
+
= 2.1.8 =
|
562 |
+
- Improved the after logout redirection so it uses the home_url() value.
|
563 |
+
- Fixed a bug in the member table sorting functionality.
|
564 |
+
- The members table can now be sorted using ID column.
|
565 |
+
|
566 |
+
|
567 |
+
= 2.1.7 =
|
568 |
+
- Added a new feature to automatically delete pending membership accounts that are older than 1 or 2 months.
|
569 |
+
- Fixed an issue with the send notification to admin email settings not saving.
|
570 |
+
|
571 |
+
= 2.1.6 =
|
572 |
+
- Fixed a bug with new membership level creation with a number of days or weeks duration value.
|
573 |
+
|
574 |
+
= 2.1.5 =
|
575 |
+
- Improved the attachment protection so it doesn't protect when viewing from the admin side also.
|
576 |
+
- Removed a dubug dump statement.
|
577 |
+
|
578 |
+
= 2.1.4 =
|
579 |
+
- Improved the login authentication handler logic.
|
580 |
+
- Fixed the restricted image icon URL.
|
581 |
+
- Updated the restricted attachment icon to use a better one.
|
582 |
+
|
583 |
+
= 2.1.3 =
|
584 |
+
- Added a new feature to allow the members to delete their accounts.
|
585 |
+
|
586 |
+
= 2.1.2 =
|
587 |
+
- Updated the membership subscription payment cancellation handler and made it more robust.
|
588 |
+
- Added an option in the settings to reset the debug log files.
|
589 |
+
|
590 |
+
= 2.1.1 =
|
591 |
+
- Enhanced the username exists function query.
|
592 |
+
- Updated one of the notice messages.
|
593 |
+
|
594 |
+
= 2.1 =
|
595 |
+
- Changed the PHP short tags to the standard tags
|
596 |
+
- Updated a message in the settings to make the usage instruction clear.
|
597 |
+
- Corrected a version number value.
|
598 |
+
|
599 |
+
= 2.0 =
|
600 |
+
- Improved some of the default content protection messages.
|
601 |
+
- Added Danish language translation to the plugin. The translation was submitted by Niels Boje Lund.
|
602 |
+
|
603 |
+
= 1.9.9 =
|
604 |
+
- WP Multi-site network activation error fix.
|
605 |
+
|
606 |
+
= 1.9.8 =
|
607 |
+
- Fixed an issue with the phone number not saving.
|
608 |
+
- Fixed an issue with the new fixed membership expiry date feature.
|
609 |
+
|
610 |
+
= 1.9.7 =
|
611 |
+
- Minor UI fix in the add new membership level menu.
|
612 |
+
|
613 |
+
= 1.9.6 =
|
614 |
+
- Added a new feature to allow fixed expiry date for membership levels.
|
615 |
+
- Added Russian language translation to the plugin. The translation was submitted by Vladimir Vaulin.
|
616 |
+
- Added Dutch language translation to the plugin. The translation was submitted by Henk Rostohar.
|
617 |
+
- Added Romanian language translation to the plugin. The translation was submitted by Iulian Cazangiu.
|
618 |
+
- Some minor code refactoring.
|
619 |
+
|
620 |
+
= 1.9.5 =
|
621 |
+
- Added a check to show the content of a protected post/page if the admin is previewing the post or page.
|
622 |
+
- Fixed an issue with the quick notification email feature not filtering the email shortcodes.
|
623 |
+
- Improved the login form's HTML and CSS.
|
624 |
+
|
625 |
+
= 1.9.4 =
|
626 |
+
- Added a new feature to send an email notification to a member when you edit a user's record. This will be helpful to notify members when you activate their account.
|
627 |
+
- Fixed an issue with "pending" member account getting set to active when the record is edited from admin side.
|
628 |
+
|
629 |
+
= 1.9.3 =
|
630 |
+
- Fixed an issue with the featured image not showing properly for some protected blog posts.
|
631 |
+
|
632 |
+
= 1.9.2 =
|
633 |
+
- Fixed the edit link in the member search interface.
|
634 |
+
|
635 |
+
= 1.9.1 =
|
636 |
+
- Added Turkish language translation to the plugin. The translation was submitted by Murat SEYISOGLU.
|
637 |
+
- WordPrss 4.1 compatibility.
|
638 |
+
|
639 |
+
= 1.9.0 =
|
640 |
+
- Fixed a bug in the default account setting option (the option to do manual approval for membership).
|
641 |
+
- Added Polish language translation to the plugin. The translation was submitted by Maytki.
|
642 |
+
- Added Macedonian language translation to the plugin. The translation was submitted by I. Ivanov.
|
643 |
+
|
644 |
+
= 1.8.9 =
|
645 |
+
- Added a new feature so you can set the default account status of your members. This can useful if you want to manually approve members after they signup.
|
646 |
+
|
647 |
+
= 1.8.8 =
|
648 |
+
- Fixed an issue with the account expiry when it is set to 1 year.
|
649 |
+
|
650 |
+
= 1.8.7 =
|
651 |
+
- Updated the registration form validation code to not accept apostrophe character in the username field.
|
652 |
+
- Added a new tab for showing addon settings options (some of the addons will be able to utilize this settings tab).
|
653 |
+
- Added a new action hook in the addon settings tab.
|
654 |
+
- Moved the plugin's main class initialization code outside of the plugins_loaded hook.
|
655 |
+
|
656 |
+
= 1.8.6 =
|
657 |
+
- Fixed an email validation issue with paid membership registration process.
|
658 |
+
- Added a new free addon to customize the protected content message.
|
659 |
+
|
660 |
+
= 1.8.5 =
|
661 |
+
- Added category protection feature under the membership level menu.
|
662 |
+
- Fixed a bug with paid membership paypal IPN processing code.
|
663 |
+
|
664 |
+
= 1.8.4 =
|
665 |
+
- The Password field won't use the browser's autofill option in the admin interface when editing a member info.
|
666 |
+
|
667 |
+
= 1.8.3 =
|
668 |
+
- Added Swedish language translation to the plugin. The translation was submitted by Geson Perry.
|
669 |
+
- There is now a cronjob in the plugin to expire the member profiles in the background.
|
670 |
+
- Released a new addon - https://simple-membership-plugin.com/simple-membership-registration-form-shortcode-generator/
|
671 |
+
- Added a menu called "Add-ons" for listing all the extensions of this plugin.
|
672 |
+
|
673 |
+
= 1.8.2 =
|
674 |
+
- Updated the members expiry check code at the time of login and made it more robust.
|
675 |
+
|
676 |
+
= 1.8.1 =
|
677 |
+
- MySQL database character set and collation values are read from the system when creating the tables.
|
678 |
+
- Added German language translation file to the plugin.
|
679 |
+
- Some code refactoring work.
|
680 |
+
- Added a new feature to allow admins to create a registration form for a particular membership level.
|
681 |
+
|
682 |
+
= 1.8.0 =
|
683 |
+
- Added a new feature called "more tag protection" to enable teaser content. Read the [teaser content documentation](https://simple-membership-plugin.com/creating-teaser-content-membership-site/) for more info.
|
684 |
+
- Added Portuguese (Brazil) language translation to the plugin. The translation was submitted by Rachel Oakes.
|
685 |
+
- Added cookiehash definition check (in case it is not defined already).
|
686 |
+
|
687 |
+
= 1.7.9 =
|
688 |
+
- Added Spanish language translation to the plugin. The translation was submitted by David Sanchez.
|
689 |
+
- Removed some hardcoded path from the auth class.
|
690 |
+
- WordPress 4.0 compatibility
|
691 |
+
|
692 |
+
= 1.7.8 =
|
693 |
+
- Architecture improvement for the [WP User import addon](https://simple-membership-plugin.com/import-existing-wordpress-users-simple-membership-plugin/)
|
694 |
+
- Updated the POT file with the new translation strings
|
695 |
+
|
696 |
+
= 1.7.7 =
|
697 |
+
- The plugin will now show the member account expiry date in the login widget (when a user is logged into the site).
|
698 |
+
- Added a couple of filters to the plugin.
|
699 |
+
|
700 |
+
= 1.7.6 =
|
701 |
+
- Fixed an issue with hiding the admin-bar. It will never be shown to non-members.
|
702 |
+
- Renamed the chinese language file to correct the name.
|
703 |
+
- Removed a lot of fields from the front-end registration form (after user feedback). The membership registration form is now a lot simpler with just a few fields.
|
704 |
+
- Fixed a bug with the member search option in the admin dashboard.
|
705 |
+
- Added a few new action hooks and filters.
|
706 |
+
- Fixed a bug with the media attachment protection.
|
707 |
+
|
708 |
+
= 1.7.5 =
|
709 |
+
- Fixed an issue with language file loading.
|
710 |
+
|
711 |
+
= 1.7.4 =
|
712 |
+
- Added capability to use any of the shortcodes (example: Login widget) in the sidebar text widget.
|
713 |
+
|
714 |
+
= 1.7.3 =
|
715 |
+
- Added french language translation to the plugin. The translation was submitted by Zeb.
|
716 |
+
- Fixed a few language textdomain issue.
|
717 |
+
- Fixed an issue with the the registration and login page shortcode (On some sites the registration form wasn't visible.)
|
718 |
+
- Added simplified Chinese language translation to the plugin. The translation was submitted by Ben.
|
719 |
+
|
720 |
+
= 1.7.2 =
|
721 |
+
- Added a new hook after the plugin's admin menu is rendered so addons can hook into the main plugin menu.
|
722 |
+
- Fixed another PHP 5.2 code compatibility issue.
|
723 |
+
- Fixed an issue with the bulk member delete functionality.
|
724 |
+
|
725 |
+
= 1.7.1 =
|
726 |
+
- Fixed another PHP 5.2 code compatibility issue.
|
727 |
+
- Updated the plugin's language file template.
|
728 |
+
|
729 |
+
= 1.7 =
|
730 |
+
- Tweaked code to make it compatible with PHP 5.2 (previously PHP 5.3 was the requirement).
|
731 |
+
- Added checks for checking if a WP user account already exists with the chosen username (when a member registers).
|
732 |
+
- Fixed a few translation strings.
|
733 |
+
|
734 |
+
= 1.6 =
|
735 |
+
- Added comment protection. Comments on your protected posts will also be protected automatically.
|
736 |
+
- Added a new feature to hide the admin toolbar for logged in users of the site.
|
737 |
+
- Bug fix: password reset email not sent correctly
|
738 |
+
- Bug fix: page rendering issue after the member updates the profile.
|
739 |
+
|
740 |
+
= 1.5.1 =
|
741 |
+
- Compatibility with the after login redirection addon:
|
742 |
+
http://wordpress.org/plugins/simple-membership-after-login-redirection/
|
743 |
+
|
744 |
+
= 1.5 =
|
745 |
+
- Fixed a bug with sending member email when added via admin dashboard.
|
746 |
+
- Fixed a bug with general settings values resetting.
|
747 |
+
- Added a few action hooks to the plugin.
|
748 |
+
|
749 |
+
= 1.4 =
|
750 |
+
- Refactored some code to enhance the architecture. This will help us add some good features in the future.
|
751 |
+
- Added debug logger to help troubleshoot after membership payment tasks.
|
752 |
+
- Added a new action hook for after paypal IPN is processed.
|
753 |
+
|
754 |
+
= 1.3 =
|
755 |
+
- Fixed a bug with premium membership registration.
|
756 |
+
|
757 |
+
= 1.2 =
|
758 |
+
- First commit to WordPress repository.
|
759 |
+
|
760 |
+
== Upgrade Notice ==
|
761 |
+
If you are using the form builder addon, then that addon will need to be upgraded to v1.1 also.
|
762 |
+
|
763 |
+
== Arbitrary section ==
|
764 |
+
None
|
simple-wp-membership.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Simple WordPress Membership
|
4 |
-
Version: 3.5.
|
5 |
Text Domain: simple-membership
|
6 |
Plugin URI: https://simple-membership-plugin.com/
|
7 |
Author: smp7, wp.insider
|
@@ -18,7 +18,7 @@ include_once('classes/class.simple-wp-membership.php');
|
|
18 |
include_once('classes/class.swpm-cronjob.php');
|
19 |
include_once('swpm-compat.php');
|
20 |
|
21 |
-
define('SIMPLE_WP_MEMBERSHIP_VER', '3.5.
|
22 |
define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.2');
|
23 |
define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
|
24 |
define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: Simple WordPress Membership
|
4 |
+
Version: 3.5.8
|
5 |
Text Domain: simple-membership
|
6 |
Plugin URI: https://simple-membership-plugin.com/
|
7 |
Author: smp7, wp.insider
|
18 |
include_once('classes/class.swpm-cronjob.php');
|
19 |
include_once('swpm-compat.php');
|
20 |
|
21 |
+
define('SIMPLE_WP_MEMBERSHIP_VER', '3.5.8');
|
22 |
define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.2');
|
23 |
define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
|
24 |
define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
|
views/admin_edit.php
CHANGED
@@ -86,7 +86,7 @@
|
|
86 |
|
87 |
<?php include('admin_member_form_common_js.php'); ?>
|
88 |
<?php echo apply_filters('swpm_admin_custom_fields', '',$membership_level); ?>
|
89 |
-
<?php submit_button( SwpmUtils::_('
|
90 |
<?php
|
91 |
$delete_swpmuser_nonce = wp_create_nonce( 'delete_swpmuser_admin_end' );
|
92 |
$member_delete_url = "?page=simple_wp_membership&member_action=delete&member_id=".$member_id."&delete_swpmuser_nonce=".$delete_swpmuser_nonce;
|
86 |
|
87 |
<?php include('admin_member_form_common_js.php'); ?>
|
88 |
<?php echo apply_filters('swpm_admin_custom_fields', '',$membership_level); ?>
|
89 |
+
<?php submit_button( SwpmUtils::_('Save Data'), 'primary', 'editswpmuser', true, array( 'id' => 'createswpmusersub' ) ); ?>
|
90 |
<?php
|
91 |
$delete_swpmuser_nonce = wp_create_nonce( 'delete_swpmuser_admin_end' );
|
92 |
$member_delete_url = "?page=simple_wp_membership&member_action=delete&member_id=".$member_id."&delete_swpmuser_nonce=".$delete_swpmuser_nonce;
|
views/admin_member_form_common_part.php
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
<?php foreach ($levels as $level)
|
5 |
-
|
6 |
-
<?php endforeach
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
1 |
+
<tr>
|
2 |
+
<th scope="row"><label for="membership_level"><?php echo SwpmUtils::_('Membership Level'); ?></label></th>
|
3 |
+
<td><select class="regular-text" name="membership_level" id="membership_level">
|
4 |
+
<?php foreach ($levels as $level): ?>
|
5 |
+
<option <?php echo ($level['id'] == $membership_level) ? "selected='selected'" : ""; ?> value="<?php echo $level['id']; ?>"> <?php echo $level['alias'] ?></option>
|
6 |
+
<?php endforeach; ?>
|
7 |
+
</select>
|
8 |
+
</td>
|
9 |
+
</tr>
|
10 |
+
<tr>
|
11 |
+
<th scope="row"><label for="subscription_starts"><?php echo SwpmUtils::_('Access Starts') ?> </label></th>
|
12 |
+
<td><input class="regular-text" name="subscription_starts" type="text" id="subscription_starts" value="<?php echo esc_attr($subscription_starts); ?>" /></td>
|
13 |
+
</tr>
|
14 |
+
<tr>
|
15 |
+
<th scope="row"><label for="first_name"><?php echo SwpmUtils::_('First Name') ?> </label></th>
|
16 |
+
<td><input class="regular-text" name="first_name" type="text" id="first_name" value="<?php echo esc_attr($first_name); ?>" /></td>
|
17 |
+
</tr>
|
18 |
+
<tr>
|
19 |
+
<th scope="row"><label for="last_name"><?php echo SwpmUtils::_('Last Name') ?> </label></th>
|
20 |
+
<td><input class="regular-text" name="last_name" type="text" id="last_name" value="<?php echo esc_attr($last_name); ?>" /></td>
|
21 |
+
</tr>
|
22 |
+
<tr>
|
23 |
+
<th scope="row"><label for="gender"><?php echo SwpmUtils::_('Gender'); ?></label></th>
|
24 |
+
<td><select class="regular-text" name="gender" id="gender">
|
25 |
+
<?php echo SwpmUtils::gender_dropdown($gender) ?>
|
26 |
+
</select>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<th scope="row"><label for="phone"><?php echo SwpmUtils::_('Phone') ?> </label></th>
|
31 |
+
<td><input class="regular-text" name="phone" type="text" id="phone" value="<?php echo esc_attr($phone); ?>" /></td>
|
32 |
+
</tr>
|
33 |
+
<tr>
|
34 |
+
<th scope="row"><label for="address_street"><?php echo SwpmUtils::_('Street') ?> </label></th>
|
35 |
+
<td><input class="regular-text" name="address_street" type="text" id="address_street" value="<?php echo esc_attr($address_street); ?>" /></td>
|
36 |
+
</tr>
|
37 |
+
<tr>
|
38 |
+
<th scope="row"><label for="address_city"><?php echo SwpmUtils::_('City') ?> </label></th>
|
39 |
+
<td><input class="regular-text" name="address_city" type="text" id="address_city" value="<?php echo esc_attr($address_city); ?>" /></td>
|
40 |
+
</tr>
|
41 |
+
<tr>
|
42 |
+
<th scope="row"><label for="address_state"><?php echo SwpmUtils::_('State') ?> </label></th>
|
43 |
+
<td><input class="regular-text" name="address_state" type="text" id="address_state" value="<?php echo esc_attr($address_state); ?>" /></td>
|
44 |
+
</tr>
|
45 |
+
<tr>
|
46 |
+
<th scope="row"><label for="address_zipcode"><?php echo SwpmUtils::_('Zipcode') ?> </label></th>
|
47 |
+
<td><input class="regular-text" name="address_zipcode" type="text" id="address_zipcode" value="<?php echo esc_attr($address_zipcode); ?>" /></td>
|
48 |
+
</tr>
|
49 |
+
<tr>
|
50 |
+
<th scope="row"><label for="country"><?php echo SwpmUtils::_('Country') ?> </label></th>
|
51 |
+
<td><select class="regular-text" id="country" name="country"><?php echo SwpmMiscUtils::get_countries_dropdown($country) ?></select></td>
|
52 |
+
</tr>
|
53 |
+
<tr>
|
54 |
+
<th scope="row"><label for="company_name"><?php echo SwpmUtils::_('Company') ?></label></th>
|
55 |
+
<td><input name="company_name" type="text" id="company_name" class="regular-text" value="<?php echo esc_attr($company_name); ?>" /></td>
|
56 |
+
</tr>
|
57 |
+
<tr>
|
58 |
+
<th scope="row"><label for="member_since"><?php echo SwpmUtils::_('Member Since') ?> </label></th>
|
59 |
+
<td><input class="regular-text" name="member_since" type="text" id="member_since" value="<?php echo esc_attr($member_since); ?>" /></td>
|
60 |
+
</tr>
|
views/edit.php
CHANGED
@@ -56,8 +56,12 @@ extract($user_data, EXTR_SKIP);
|
|
56 |
</tr>
|
57 |
<tr class="swpm-profile-country-row">
|
58 |
<td><label for="country"><?php echo SwpmUtils::_('Country'); ?></label></td>
|
59 |
-
<td><
|
60 |
</tr>
|
|
|
|
|
|
|
|
|
61 |
<tr class="swpm-profile-membership-level-row">
|
62 |
<td><label for="membership_level"><?php echo SwpmUtils::_('Membership Level'); ?></label></td>
|
63 |
<td>
|
56 |
</tr>
|
57 |
<tr class="swpm-profile-country-row">
|
58 |
<td><label for="country"><?php echo SwpmUtils::_('Country'); ?></label></td>
|
59 |
+
<td><select id="country" name="country"><?php echo SwpmMiscUtils::get_countries_dropdown($country) ?></select></td>
|
60 |
</tr>
|
61 |
+
<tr class="swpm-profile-company-row">
|
62 |
+
<td><label for="company_name"><?php echo SwpmUtils::_('Company Name'); ?></label></td>
|
63 |
+
<td><input type="text" id="company_name" value="<?php echo $company_name; ?>" size="50" name="company_name" /></td>
|
64 |
+
</tr>
|
65 |
<tr class="swpm-profile-membership-level-row">
|
66 |
<td><label for="membership_level"><?php echo SwpmUtils::_('Membership Level'); ?></label></td>
|
67 |
<td>
|
views/payments/payment-gateway/admin_stripe_buy_now_button.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
add_action('swpm_create_new_button_for_stripe_buy_now', 'swpm_create_new_stripe_buy_now_button');
|
6 |
|
7 |
function swpm_create_new_stripe_buy_now_button() {
|
8 |
-
|
9 |
//Test for PHP v5.3.3 or show error and don't show the remaining interface.
|
10 |
if (version_compare(PHP_VERSION, '5.3.3') >= 0) {
|
11 |
//The server is using at least PHP version 5.3.3
|
@@ -103,7 +103,7 @@ function swpm_create_new_stripe_buy_now_button() {
|
|
103 |
<tr valign="top">
|
104 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('Stripe API keys. You can get this from your Stripe account.'); ?></div></th>
|
105 |
</tr>
|
106 |
-
|
107 |
<tr valign="top">
|
108 |
<th scope="row"><?php echo SwpmUtils::_('Test Secret Key'); ?></th>
|
109 |
<td>
|
@@ -132,11 +132,19 @@ function swpm_create_new_stripe_buy_now_button() {
|
|
132 |
<p class="description">Enter your Stripe live publishable key.</p>
|
133 |
</td>
|
134 |
</tr>
|
135 |
-
|
136 |
<tr valign="top">
|
137 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('The following details are optional.'); ?></div></th>
|
138 |
</tr>
|
139 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
<tr valign="top">
|
141 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
142 |
<td>
|
@@ -144,7 +152,7 @@ function swpm_create_new_stripe_buy_now_button() {
|
|
144 |
<p class="description">This is the URL the user will be redirected to after a successful payment. Enter the URL of your Thank You page here.</p>
|
145 |
</td>
|
146 |
</tr>
|
147 |
-
|
148 |
</table>
|
149 |
|
150 |
<p class="submit">
|
@@ -166,7 +174,6 @@ add_action('swpm_create_new_button_process_submission', 'swpm_save_new_stripe_bu
|
|
166 |
function swpm_save_new_stripe_buy_now_button_data() {
|
167 |
if (isset($_REQUEST['swpm_stripe_buy_now_save_submit'])) {
|
168 |
//This is a Stripe buy now button save event. Process the submission.
|
169 |
-
|
170 |
//Save the button data
|
171 |
$button_id = wp_insert_post(
|
172 |
array(
|
@@ -182,15 +189,16 @@ function swpm_save_new_stripe_buy_now_button_data() {
|
|
182 |
add_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
183 |
add_post_meta($button_id, 'payment_amount', trim(sanitize_text_field($_REQUEST['payment_amount'])));
|
184 |
add_post_meta($button_id, 'payment_currency', sanitize_text_field($_REQUEST['payment_currency']));
|
185 |
-
|
186 |
add_post_meta($button_id, 'stripe_test_secret_key', trim(sanitize_text_field($_REQUEST['stripe_test_secret_key'])));
|
187 |
add_post_meta($button_id, 'stripe_test_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_test_publishable_key'])));
|
188 |
add_post_meta($button_id, 'stripe_live_secret_key', trim(sanitize_text_field($_REQUEST['stripe_live_secret_key'])));
|
189 |
add_post_meta($button_id, 'stripe_live_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_live_publishable_key'])));
|
190 |
|
|
|
|
|
191 |
add_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
192 |
//add_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
193 |
-
|
194 |
//Redirect to the edit interface of this button with $button_id
|
195 |
//$url = admin_url() . 'admin.php?page=simple_wp_membership_payments&tab=edit_button&button_id=' . $button_id . '&button_type=' . $button_type;
|
196 |
//Redirect to the manage payment buttons interface
|
@@ -222,15 +230,21 @@ function swpm_edit_stripe_buy_now_button() {
|
|
222 |
$membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
|
223 |
$payment_amount = get_post_meta($button_id, 'payment_amount', true);
|
224 |
$payment_currency = get_post_meta($button_id, 'payment_currency', true);
|
225 |
-
|
226 |
$stripe_test_secret_key = get_post_meta($button_id, 'stripe_test_secret_key', true);
|
227 |
$stripe_test_publishable_key = get_post_meta($button_id, 'stripe_test_publishable_key', true);
|
228 |
$stripe_live_secret_key = get_post_meta($button_id, 'stripe_live_secret_key', true);
|
229 |
$stripe_live_publishable_key = get_post_meta($button_id, 'stripe_live_publishable_key', true);
|
230 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
$return_url = get_post_meta($button_id, 'return_url', true);
|
232 |
//$button_image_url = get_post_meta($button_id, 'button_image_url', true);
|
233 |
-
|
234 |
?>
|
235 |
<div class="postbox">
|
236 |
<h3 class="hndle"><label for="title"><?php echo SwpmUtils::_('Stripe Buy Now Button Configuration'); ?></label></h3>
|
@@ -313,7 +327,7 @@ function swpm_edit_stripe_buy_now_button() {
|
|
313 |
<tr valign="top">
|
314 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('Stripe API keys. You can get this from your Stripe account.'); ?></div></th>
|
315 |
</tr>
|
316 |
-
|
317 |
<tr valign="top">
|
318 |
<th scope="row"><?php echo SwpmUtils::_('Test Secret Key'); ?></th>
|
319 |
<td>
|
@@ -342,11 +356,19 @@ function swpm_edit_stripe_buy_now_button() {
|
|
342 |
<p class="description">Enter your Stripe live publishable key.</p>
|
343 |
</td>
|
344 |
</tr>
|
345 |
-
|
346 |
<tr valign="top">
|
347 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('The following details are optional.'); ?></div></th>
|
348 |
</tr>
|
349 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
<tr valign="top">
|
351 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
352 |
<td>
|
@@ -376,10 +398,9 @@ add_action('swpm_edit_payment_button_process_submission', 'swpm_edit_stripe_buy_
|
|
376 |
function swpm_edit_stripe_buy_now_button_data() {
|
377 |
if (isset($_REQUEST['swpm_stripe_buy_now_edit_submit'])) {
|
378 |
//This is a Stripe buy now button edit event. Process the submission.
|
379 |
-
|
380 |
//Update and Save the edited payment button data
|
381 |
$button_id = sanitize_text_field($_REQUEST['button_id']);
|
382 |
-
$button_id = absint($button_id);
|
383 |
$button_type = sanitize_text_field($_REQUEST['button_type']);
|
384 |
$button_name = sanitize_text_field($_REQUEST['button_name']);
|
385 |
|
@@ -394,12 +415,14 @@ function swpm_edit_stripe_buy_now_button_data() {
|
|
394 |
update_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
395 |
update_post_meta($button_id, 'payment_amount', trim(sanitize_text_field($_REQUEST['payment_amount'])));
|
396 |
update_post_meta($button_id, 'payment_currency', sanitize_text_field($_REQUEST['payment_currency']));
|
397 |
-
|
398 |
update_post_meta($button_id, 'stripe_test_secret_key', trim(sanitize_text_field($_REQUEST['stripe_test_secret_key'])));
|
399 |
update_post_meta($button_id, 'stripe_test_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_test_publishable_key'])));
|
400 |
update_post_meta($button_id, 'stripe_live_secret_key', trim(sanitize_text_field($_REQUEST['stripe_live_secret_key'])));
|
401 |
update_post_meta($button_id, 'stripe_live_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_live_publishable_key'])));
|
402 |
-
|
|
|
|
|
403 |
update_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
404 |
//update_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
405 |
|
5 |
add_action('swpm_create_new_button_for_stripe_buy_now', 'swpm_create_new_stripe_buy_now_button');
|
6 |
|
7 |
function swpm_create_new_stripe_buy_now_button() {
|
8 |
+
|
9 |
//Test for PHP v5.3.3 or show error and don't show the remaining interface.
|
10 |
if (version_compare(PHP_VERSION, '5.3.3') >= 0) {
|
11 |
//The server is using at least PHP version 5.3.3
|
103 |
<tr valign="top">
|
104 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('Stripe API keys. You can get this from your Stripe account.'); ?></div></th>
|
105 |
</tr>
|
106 |
+
|
107 |
<tr valign="top">
|
108 |
<th scope="row"><?php echo SwpmUtils::_('Test Secret Key'); ?></th>
|
109 |
<td>
|
132 |
<p class="description">Enter your Stripe live publishable key.</p>
|
133 |
</td>
|
134 |
</tr>
|
135 |
+
|
136 |
<tr valign="top">
|
137 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('The following details are optional.'); ?></div></th>
|
138 |
</tr>
|
139 |
+
|
140 |
+
<tr valign="top">
|
141 |
+
<th scope="row"><?php echo SwpmUtils::_('Collect Customer Address'); ?></th>
|
142 |
+
<td>
|
143 |
+
<input type="checkbox" name="collect_address" value="1"/>
|
144 |
+
<p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
|
145 |
+
</td>
|
146 |
+
</tr>
|
147 |
+
|
148 |
<tr valign="top">
|
149 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
150 |
<td>
|
152 |
<p class="description">This is the URL the user will be redirected to after a successful payment. Enter the URL of your Thank You page here.</p>
|
153 |
</td>
|
154 |
</tr>
|
155 |
+
|
156 |
</table>
|
157 |
|
158 |
<p class="submit">
|
174 |
function swpm_save_new_stripe_buy_now_button_data() {
|
175 |
if (isset($_REQUEST['swpm_stripe_buy_now_save_submit'])) {
|
176 |
//This is a Stripe buy now button save event. Process the submission.
|
|
|
177 |
//Save the button data
|
178 |
$button_id = wp_insert_post(
|
179 |
array(
|
189 |
add_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
190 |
add_post_meta($button_id, 'payment_amount', trim(sanitize_text_field($_REQUEST['payment_amount'])));
|
191 |
add_post_meta($button_id, 'payment_currency', sanitize_text_field($_REQUEST['payment_currency']));
|
192 |
+
|
193 |
add_post_meta($button_id, 'stripe_test_secret_key', trim(sanitize_text_field($_REQUEST['stripe_test_secret_key'])));
|
194 |
add_post_meta($button_id, 'stripe_test_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_test_publishable_key'])));
|
195 |
add_post_meta($button_id, 'stripe_live_secret_key', trim(sanitize_text_field($_REQUEST['stripe_live_secret_key'])));
|
196 |
add_post_meta($button_id, 'stripe_live_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_live_publishable_key'])));
|
197 |
|
198 |
+
add_post_meta($button_id, 'stripe_collect_address', isset($_POST['collect_address']) ? '1' : '');
|
199 |
+
|
200 |
add_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
201 |
//add_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
|
|
202 |
//Redirect to the edit interface of this button with $button_id
|
203 |
//$url = admin_url() . 'admin.php?page=simple_wp_membership_payments&tab=edit_button&button_id=' . $button_id . '&button_type=' . $button_type;
|
204 |
//Redirect to the manage payment buttons interface
|
230 |
$membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
|
231 |
$payment_amount = get_post_meta($button_id, 'payment_amount', true);
|
232 |
$payment_currency = get_post_meta($button_id, 'payment_currency', true);
|
233 |
+
|
234 |
$stripe_test_secret_key = get_post_meta($button_id, 'stripe_test_secret_key', true);
|
235 |
$stripe_test_publishable_key = get_post_meta($button_id, 'stripe_test_publishable_key', true);
|
236 |
$stripe_live_secret_key = get_post_meta($button_id, 'stripe_live_secret_key', true);
|
237 |
$stripe_live_publishable_key = get_post_meta($button_id, 'stripe_live_publishable_key', true);
|
238 |
+
|
239 |
+
$collect_address = get_post_meta($button_id, 'stripe_collect_address', true);
|
240 |
+
if ($collect_address == '1') {
|
241 |
+
$collect_address = ' checked';
|
242 |
+
} else {
|
243 |
+
$collect_address = '';
|
244 |
+
}
|
245 |
+
|
246 |
$return_url = get_post_meta($button_id, 'return_url', true);
|
247 |
//$button_image_url = get_post_meta($button_id, 'button_image_url', true);
|
|
|
248 |
?>
|
249 |
<div class="postbox">
|
250 |
<h3 class="hndle"><label for="title"><?php echo SwpmUtils::_('Stripe Buy Now Button Configuration'); ?></label></h3>
|
327 |
<tr valign="top">
|
328 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('Stripe API keys. You can get this from your Stripe account.'); ?></div></th>
|
329 |
</tr>
|
330 |
+
|
331 |
<tr valign="top">
|
332 |
<th scope="row"><?php echo SwpmUtils::_('Test Secret Key'); ?></th>
|
333 |
<td>
|
356 |
<p class="description">Enter your Stripe live publishable key.</p>
|
357 |
</td>
|
358 |
</tr>
|
359 |
+
|
360 |
<tr valign="top">
|
361 |
<th colspan="2"><div class="swpm-grey-box"><?php echo SwpmUtils::_('The following details are optional.'); ?></div></th>
|
362 |
</tr>
|
363 |
+
|
364 |
+
<tr valign="top">
|
365 |
+
<th scope="row"><?php echo SwpmUtils::_('Collect Customer Address'); ?></th>
|
366 |
+
<td>
|
367 |
+
<input type="checkbox" name="collect_address" value="1"<?php echo $collect_address; ?>/>
|
368 |
+
<p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
|
369 |
+
</td>
|
370 |
+
</tr>
|
371 |
+
|
372 |
<tr valign="top">
|
373 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
374 |
<td>
|
398 |
function swpm_edit_stripe_buy_now_button_data() {
|
399 |
if (isset($_REQUEST['swpm_stripe_buy_now_edit_submit'])) {
|
400 |
//This is a Stripe buy now button edit event. Process the submission.
|
|
|
401 |
//Update and Save the edited payment button data
|
402 |
$button_id = sanitize_text_field($_REQUEST['button_id']);
|
403 |
+
$button_id = absint($button_id);
|
404 |
$button_type = sanitize_text_field($_REQUEST['button_type']);
|
405 |
$button_name = sanitize_text_field($_REQUEST['button_name']);
|
406 |
|
415 |
update_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
416 |
update_post_meta($button_id, 'payment_amount', trim(sanitize_text_field($_REQUEST['payment_amount'])));
|
417 |
update_post_meta($button_id, 'payment_currency', sanitize_text_field($_REQUEST['payment_currency']));
|
418 |
+
|
419 |
update_post_meta($button_id, 'stripe_test_secret_key', trim(sanitize_text_field($_REQUEST['stripe_test_secret_key'])));
|
420 |
update_post_meta($button_id, 'stripe_test_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_test_publishable_key'])));
|
421 |
update_post_meta($button_id, 'stripe_live_secret_key', trim(sanitize_text_field($_REQUEST['stripe_live_secret_key'])));
|
422 |
update_post_meta($button_id, 'stripe_live_publishable_key', trim(sanitize_text_field($_REQUEST['stripe_live_publishable_key'])));
|
423 |
+
|
424 |
+
update_post_meta($button_id, 'stripe_collect_address', isset($_POST['collect_address']) ? '1' : '');
|
425 |
+
|
426 |
update_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
427 |
//update_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
428 |
|
views/payments/payment-gateway/admin_stripe_subscription_button.php
CHANGED
@@ -179,6 +179,14 @@ function swpm_render_new_edit_stripe_subscription_button_interface($opts, $edit
|
|
179 |
|
180 |
<table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
<tr valign="top">
|
183 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
184 |
<td>
|
@@ -275,6 +283,7 @@ function swpm_save_edit_stripe_subscription_button_data() {
|
|
275 |
update_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
276 |
update_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
277 |
update_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
|
|
278 |
|
279 |
if ($edit) {
|
280 |
// let's see if Stripe details (plan ID and Secret Key) are valid
|
179 |
|
180 |
<table class="form-table" width="100%" border="0" cellspacing="0" cellpadding="6">
|
181 |
|
182 |
+
<tr valign="top">
|
183 |
+
<th scope="row"><?php echo SwpmUtils::_('Collect Customer Address'); ?></th>
|
184 |
+
<td>
|
185 |
+
<input type="checkbox" name="collect_address" value="1"<?php echo ($edit ? ((isset($opts['stripe_collect_address'][0]) && $opts['stripe_collect_address'][0] === '1') ? ' checked' : '') : ''); ?>/>
|
186 |
+
<p class="description">Enable this option if you want to collect customer address during Stripe checkout.</p>
|
187 |
+
</td>
|
188 |
+
</tr>
|
189 |
+
|
190 |
<tr valign="top">
|
191 |
<th scope="row"><?php echo SwpmUtils::_('Return URL'); ?></th>
|
192 |
<td>
|
283 |
update_post_meta($button_id, 'membership_level_id', sanitize_text_field($_REQUEST['membership_level_id']));
|
284 |
update_post_meta($button_id, 'return_url', trim(sanitize_text_field($_REQUEST['return_url'])));
|
285 |
update_post_meta($button_id, 'button_image_url', trim(sanitize_text_field($_REQUEST['button_image_url'])));
|
286 |
+
update_post_meta($button_id, 'stripe_collect_address', isset($_POST['collect_address']) ? '1' : '');
|
287 |
|
288 |
if ($edit) {
|
289 |
// let's see if Stripe details (plan ID and Secret Key) are valid
|
views/payments/payment-gateway/paypal_button_shortcode_view.php
CHANGED
@@ -63,7 +63,7 @@ function swpm_render_pp_buy_now_button_sc_output($button_code, $args) {
|
|
63 |
$output .= '<input type="hidden" name="cmd" value="_xclick" />';
|
64 |
$output .= '<input type="hidden" name="charset" value="utf-8" />';
|
65 |
$output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
|
66 |
-
$output .= '<input type="hidden" name="business" value="' .
|
67 |
$output .= '<input type="hidden" name="amount" value="' . $payment_amount . '" />';
|
68 |
$output .= '<input type="hidden" name="currency_code" value="' . $payment_currency . '" />';
|
69 |
$output .= '<input type="hidden" name="item_number" value="' . $button_id . '" />';
|
@@ -179,7 +179,7 @@ function swpm_render_pp_subscription_button_sc_output($button_code, $args) {
|
|
179 |
$output .= '<input type="hidden" name="cmd" value="_xclick-subscriptions" />';
|
180 |
$output .= '<input type="hidden" name="charset" value="utf-8" />';
|
181 |
$output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
|
182 |
-
$output .= '<input type="hidden" name="business" value="' .
|
183 |
$output .= '<input type="hidden" name="currency_code" value="' . $payment_currency . '" />';
|
184 |
$output .= '<input type="hidden" name="item_number" value="' . $button_id . '" />';
|
185 |
$output .= '<input type="hidden" name="item_name" value="' . htmlspecialchars($button_cpt->post_title) . '" />';
|
63 |
$output .= '<input type="hidden" name="cmd" value="_xclick" />';
|
64 |
$output .= '<input type="hidden" name="charset" value="utf-8" />';
|
65 |
$output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
|
66 |
+
$output .= '<input type="hidden" name="business" value="' . apply_filters('swpm_buy_now_button_paypal_email',$paypal_email) . '" />';
|
67 |
$output .= '<input type="hidden" name="amount" value="' . $payment_amount . '" />';
|
68 |
$output .= '<input type="hidden" name="currency_code" value="' . $payment_currency . '" />';
|
69 |
$output .= '<input type="hidden" name="item_number" value="' . $button_id . '" />';
|
179 |
$output .= '<input type="hidden" name="cmd" value="_xclick-subscriptions" />';
|
180 |
$output .= '<input type="hidden" name="charset" value="utf-8" />';
|
181 |
$output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
|
182 |
+
$output .= '<input type="hidden" name="business" value="' . apply_filters('swpm_subscription_button_paypal_email',$paypal_email) . '" />';
|
183 |
$output .= '<input type="hidden" name="currency_code" value="' . $payment_currency . '" />';
|
184 |
$output .= '<input type="hidden" name="item_number" value="' . $button_id . '" />';
|
185 |
$output .= '<input type="hidden" name="item_name" value="' . htmlspecialchars($button_cpt->post_title) . '" />';
|
views/payments/payment-gateway/stripe_button_shortcode_view.php
CHANGED
@@ -18,8 +18,7 @@ function swpm_render_stripe_buy_now_button_sc_output($button_code, $args) {
|
|
18 |
//Check new_window parameter
|
19 |
$window_target = isset($args['new_window']) ? 'target="_blank"' : '';
|
20 |
$button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
|
21 |
-
|
22 |
-
; //By default don't show the billing address in the checkout form.
|
23 |
$item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
|
24 |
|
25 |
$settings = SwpmSettings::get_instance();
|
@@ -75,6 +74,18 @@ function swpm_render_stripe_buy_now_button_sc_output($button_code, $args) {
|
|
75 |
$publishable_key = $stripe_live_publishable_key; //Use live API key
|
76 |
}
|
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
/* === Stripe Buy Now Button Form === */
|
79 |
$output = '';
|
80 |
$output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
|
@@ -136,8 +147,6 @@ function swpm_render_stripe_subscription_button_sc_output($button_code, $args) {
|
|
136 |
//Check new_window parameter
|
137 |
$window_target = isset($args['new_window']) ? 'target="_blank"' : '';
|
138 |
$button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
|
139 |
-
$billing_address = isset($args['billing_address']) ? '1' : '';
|
140 |
-
; //By default don't show the billing address in the checkout form.
|
141 |
$item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
|
142 |
|
143 |
$settings = SwpmSettings::get_instance();
|
@@ -228,6 +237,17 @@ function swpm_render_stripe_subscription_button_sc_output($button_code, $args) {
|
|
228 |
// if ($trial != NULL) {
|
229 |
// $description .= '. '.$trial . ' days FREE trial.';
|
230 |
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
232 |
/* === Stripe Buy Now Button Form === */
|
233 |
$output = '';
|
18 |
//Check new_window parameter
|
19 |
$window_target = isset($args['new_window']) ? 'target="_blank"' : '';
|
20 |
$button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
|
21 |
+
|
|
|
22 |
$item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
|
23 |
|
24 |
$settings = SwpmSettings::get_instance();
|
74 |
$publishable_key = $stripe_live_publishable_key; //Use live API key
|
75 |
}
|
76 |
|
77 |
+
//Billing address
|
78 |
+
$billing_address = isset($args['billing_address']) ? '1' : '';
|
79 |
+
//By default don't show the billing address in the checkout form.
|
80 |
+
//if billing_address parameter is not present in the shortcode, let's check button option
|
81 |
+
if ($billing_address === '') {
|
82 |
+
$collect_address = get_post_meta($button_id, 'stripe_collect_address', true);
|
83 |
+
if ($collect_address === '1') {
|
84 |
+
//Collect Address enabled in button settings
|
85 |
+
$billing_address = 1;
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
/* === Stripe Buy Now Button Form === */
|
90 |
$output = '';
|
91 |
$output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
|
147 |
//Check new_window parameter
|
148 |
$window_target = isset($args['new_window']) ? 'target="_blank"' : '';
|
149 |
$button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
|
|
|
|
|
150 |
$item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
|
151 |
|
152 |
$settings = SwpmSettings::get_instance();
|
237 |
// if ($trial != NULL) {
|
238 |
// $description .= '. '.$trial . ' days FREE trial.';
|
239 |
// }
|
240 |
+
//Billing address
|
241 |
+
$billing_address = isset($args['billing_address']) ? '1' : '';
|
242 |
+
//By default don't show the billing address in the checkout form.
|
243 |
+
//if billing_address parameter is not present in the shortcode, let's check button option
|
244 |
+
if ($billing_address === '') {
|
245 |
+
$collect_address = get_post_meta($button_id, 'stripe_collect_address', true);
|
246 |
+
if ($collect_address === '1') {
|
247 |
+
//Collect Address enabled in button settings
|
248 |
+
$billing_address = 1;
|
249 |
+
}
|
250 |
+
}
|
251 |
|
252 |
/* === Stripe Buy Now Button Form === */
|
253 |
$output = '';
|