Version Description
- Adds excerpt to membership restricted content when excerpts are used and the user is logged in (should work the same as blocked content for a non-logged in user).
- Adds excerpt to wpmem_product_restricted_args arguments to be edited or removed using the filter.
- Adds [memberships] shortcode for admin notification email; this will include a list of memberships for the user in admin notification.
- Fixes potential issue with [wpmem_field] shortcode if field does not have a defined type.
- Updates to [wpmem_profile] and [wpmem_form password] for improved password reset.
- Moves password reset link actions to template_redirect action. This should resolve issues that occur when multiple instances of the_content are run (i.e. the appearance of an invalid key message upon completing the password reset).
- Moves export class to main user object (previously loaded from admin files). @todo Export class file also remains in admin for backward compatibility if file is called directly.
- Moves admin object load (back) to "init" action (from "admin_init") as later load can cause problems with extensions loading on the "wpmem_after_admin_init" action.
- Load dependencies after settings are loaded (allows for conditional loading of certain dependencies).
- Load membership/product restriction only if membership products setting is active.
Download this release
Release Info
Developer | cbutlerjr |
Plugin | WP-Members Membership Plugin |
Version | 3.4.4 |
Comparing to | |
See all releases |
Code changes from version 3.4.4.2 to 3.4.4
includes/admin/class-wp-members-admin-api.php
CHANGED
@@ -76,7 +76,9 @@ class WP_Members_Admin_API {
|
|
76 |
$dialogs = $this->default_dialogs(); // Load default dialogs.
|
77 |
}
|
78 |
|
79 |
-
$wpmem->
|
|
|
|
|
80 |
}
|
81 |
|
82 |
/**
|
@@ -114,6 +116,9 @@ class WP_Members_Admin_API {
|
|
114 |
}
|
115 |
include_once( $wpmem->path . 'includes/admin/tabs/class-wp-members-fields-table.php' );
|
116 |
}
|
|
|
|
|
|
|
117 |
}
|
118 |
|
119 |
/**
|
76 |
$dialogs = $this->default_dialogs(); // Load default dialogs.
|
77 |
}
|
78 |
|
79 |
+
if ( 1 == $wpmem->enable_products ) {
|
80 |
+
$wpmem->membership->admin = new WP_Members_Products_Admin();
|
81 |
+
}
|
82 |
}
|
83 |
|
84 |
/**
|
116 |
}
|
117 |
include_once( $wpmem->path . 'includes/admin/tabs/class-wp-members-fields-table.php' );
|
118 |
}
|
119 |
+
if ( current_user_can( 'list_users' ) ) {
|
120 |
+
// include_once( $wpmem->path . 'includes/admin/class-wp-members-bulk-edit-users.php' );
|
121 |
+
}
|
122 |
}
|
123 |
|
124 |
/**
|
includes/admin/class-wp-members-bulk-edit-users.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Set process to update user accordingly.
|
4 |
+
*
|
5 |
+
* This function will run for each user being updated in the main
|
6 |
+
* framework script below. Breaking out the actual update process
|
7 |
+
* makes the framework more modular so it can be adapted to multiple
|
8 |
+
* use cases.
|
9 |
+
*
|
10 |
+
* For this use case, identify the actual meta keys used for the fields
|
11 |
+
* imported with the membership slug and expiration date. The default
|
12 |
+
* set up below is "membership" and "expires". The script will get
|
13 |
+
* the meta values for those fields and run wpmem_set_user_product().
|
14 |
+
* It will clean up for itself by deleting the meta values after it
|
15 |
+
* is done.
|
16 |
+
*
|
17 |
+
* Because of the clean up process (deleting the meta keys it has
|
18 |
+
* processed), if the script crashes from too many users, it can
|
19 |
+
* be run again and will not overwrite existing processed users.
|
20 |
+
*/
|
21 |
+
function my_update_selected_user( $user_id ) {
|
22 |
+
|
23 |
+
// Set specific criteria.
|
24 |
+
$membership_key = "membership";
|
25 |
+
$expiration_key = "expires";
|
26 |
+
|
27 |
+
// Get the user's membership product info.
|
28 |
+
$membership = get_user_meta( $user_id, $membership_key, true );
|
29 |
+
$expiration = get_user_meta( $user_id, $expiration_key, true );
|
30 |
+
|
31 |
+
// Only process users who have not been processed already.
|
32 |
+
if ( $membership ) {
|
33 |
+
|
34 |
+
// Set expiration date - either "false" or MySQL timestamp.
|
35 |
+
if ( $expiration ) {
|
36 |
+
$date = ( 'none' == $expiration ) ? false : date( "Y-m-d H:i:s", strtotime( $expiration ) );
|
37 |
+
} else {
|
38 |
+
$date = false;
|
39 |
+
}
|
40 |
+
|
41 |
+
// Set user product access.
|
42 |
+
wpmem_set_user_product( $membership, $user_id, $date );
|
43 |
+
|
44 |
+
// Clean up after yourself.
|
45 |
+
delete_user_meta( $user_id, $membership_key );
|
46 |
+
delete_user_meta( $user_id, $expiration_key );
|
47 |
+
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* A drop-in code snippet to update all users' membership
|
53 |
+
* access and any applicable expiration date.
|
54 |
+
*
|
55 |
+
* To Use:
|
56 |
+
* 1. Save the code snippet to your theme's functions.php
|
57 |
+
* 2. Go to Tools > Update All Users.
|
58 |
+
* 3. Follow prompts on screen.
|
59 |
+
* 4. Remove the code snippet when completed.
|
60 |
+
*/
|
61 |
+
|
62 |
+
class WP_Members_Bulk_Edit_Users {
|
63 |
+
|
64 |
+
public $settings = array(
|
65 |
+
'enable_products' => "Membership",
|
66 |
+
'mod_reg' => "Activation",
|
67 |
+
'act_link' => "Confirmation",
|
68 |
+
);
|
69 |
+
|
70 |
+
function __construct() {
|
71 |
+
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
function admin_menu() {
|
75 |
+
global $wpmem;
|
76 |
+
if ( 1 == $wpmem->act_link || 1 == $wpmem->mod_reg || 1 == $wpmem->enable_products ) {
|
77 |
+
$hook = add_users_page( 'WP-Members Bulk Edit Users', 'Bulk Edits', 'edit_users', 'wpmem-bulk-user-update', array( $this, 'admin_page' ) );
|
78 |
+
add_action( "load-$hook", array( $this, 'admin_page_load' ) );
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
function admin_page_load() {
|
83 |
+
global $update_all_complete;
|
84 |
+
$update_all_complete = false;
|
85 |
+
|
86 |
+
$utility_state = wpmem_get( 'wpmem_bulk_utility_state', false, 'request' );
|
87 |
+
|
88 |
+
if ( isset( $_GET['page'] ) && 'wpmem-bulk-user-update' == $_GET['page'] ) {
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
if ( isset( $_GET['page'] ) && 'update-all-users' == $_GET['page'] && isset( $_POST['update-all-confirm'] ) && 1 == $_POST['update-all-confirm'] ) {
|
93 |
+
$users = get_users( array( 'fields'=>'ID' ) );
|
94 |
+
// This is where we loop through users and update them.
|
95 |
+
foreach ( $users as $user_id ) {
|
96 |
+
|
97 |
+
// This is the custom process.
|
98 |
+
my_update_selected_user( $user_id );
|
99 |
+
|
100 |
+
}
|
101 |
+
$update_all_complete = true;
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
function admin_page() {
|
106 |
+
global $wpmem, $update_all_complete;
|
107 |
+
|
108 |
+
$utility_state = wpmem_get( 'wpmem_bulk_utility_state', false, 'request' );
|
109 |
+
$form_post = ( function_exists( 'wpmem_admin_form_post_url' ) ) ? wpmem_admin_form_post_url() : '';
|
110 |
+
|
111 |
+
echo '<div class="wrap">';
|
112 |
+
echo "<h2>" . __( 'WP-Members Bulk User Update', 'wp-members' ) . "</h2>";
|
113 |
+
echo '<form name="wpmem-bulk-update-all-users" id="wpmem-bulk-update-all-users" method="post" action="' . $form_post . '">';
|
114 |
+
|
115 |
+
switch ( $utility_state ) {
|
116 |
+
|
117 |
+
case false:
|
118 |
+
|
119 |
+
echo '<p>This utility allows you to run various bulk edits to all users.</p>';
|
120 |
+
echo '<p>Select the utility to run:</p>';
|
121 |
+
echo '<select name="wpmem_bulk_utility_state">
|
122 |
+
<option value="">Select option</option>';
|
123 |
+
foreach ( $this->settings as $setting => $label ) {
|
124 |
+
if ( 1 == $wpmem->{$setting} ) {
|
125 |
+
echo '<option value="start_' . strtolower( $label ) . '">' . $label . '</option>';
|
126 |
+
}
|
127 |
+
}
|
128 |
+
echo '</select>
|
129 |
+
<input type="submit" name="submit" value="Submit" />';
|
130 |
+
break;
|
131 |
+
|
132 |
+
case 'start_activation':
|
133 |
+
case 'start_confirmation':
|
134 |
+
echo '<p>';
|
135 |
+
echo ( 'start_activation' == $utility_state ) ? 'This process will set ALL users as activated.' : 'This process will set ALL users as confirmed.';
|
136 |
+
echo '</p>';
|
137 |
+
echo '<p><input name="wpmem_bulk_utility_state" type="checkbox" value="activation_confirm" /> ';
|
138 |
+
echo ( 'start_activation' == $utility_state ) ? 'Activate all users' : 'Confirm all users';
|
139 |
+
echo '</p>';
|
140 |
+
echo '<input type="submit" name="submit" value="Submit" />';
|
141 |
+
break;
|
142 |
+
|
143 |
+
case 'activation_confirm':
|
144 |
+
case 'confirmation_confirm':
|
145 |
+
echo '<p>';
|
146 |
+
echo ( 'start_activation' == $utility_state ) ? 'All users have been set as activated.' : 'All users have been set as confirmed.';
|
147 |
+
echo '</p>';
|
148 |
+
break;
|
149 |
+
|
150 |
+
case 'start_membership':
|
151 |
+
echo '<p>';
|
152 |
+
echo 'This will set all users to a valid membership based on imported values.';
|
153 |
+
echo '<p>';
|
154 |
+
break;
|
155 |
+
|
156 |
+
case 'membership_confirm':
|
157 |
+
echo '<p>';
|
158 |
+
echo 'All user memberships have been set.';
|
159 |
+
echo '</p>';
|
160 |
+
break;
|
161 |
+
}
|
162 |
+
|
163 |
+
if ( $update_all_complete ) {
|
164 |
+
echo '<p>All users were updated.<br />';
|
165 |
+
echo 'You may now remove this code snippet if desired.</p>';
|
166 |
+
} else {
|
167 |
+
|
168 |
+
}
|
169 |
+
|
170 |
+
echo '</form>';
|
171 |
+
echo '</div>';
|
172 |
+
}
|
173 |
+
}
|
174 |
+
// End of My_Update_All_Users_Class
|
includes/admin/class-wp-members-products-admin.php
CHANGED
@@ -23,34 +23,33 @@ class WP_Members_Products_Admin {
|
|
23 |
*/
|
24 |
function __construct() {
|
25 |
global $wpmem;
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
}
|
46 |
-
|
47 |
-
add_filter( 'wpmem_user_profile_tabs', array( $this, 'user_profile_tabs' ), 1 );
|
48 |
-
add_action( 'wpmem_user_profile_tabs_content', array( $this, 'user_profile_tab_content' ), 10 );
|
49 |
-
|
50 |
-
add_filter( 'wpmem_views_users', array( $this, 'user_views' ), 10, 2 );
|
51 |
-
add_filter( 'wpmem_query_where', array( $this, 'query_where' ), 10, 2 );
|
52 |
}
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
$this->default_products = $wpmem->membership->get_default_products();
|
55 |
}
|
56 |
|
23 |
*/
|
24 |
function __construct() {
|
25 |
global $wpmem;
|
26 |
+
|
27 |
+
add_filter( 'manage_wpmem_product_posts_columns', array( $this, 'columns_heading' ) );
|
28 |
+
add_action( 'manage_wpmem_product_posts_custom_column', array( $this, 'columns_content' ), 10, 2 );
|
29 |
+
add_action( 'add_meta_boxes', array( $this, 'meta_boxes' ) );
|
30 |
+
add_action( 'page_attributes_misc_attributes', array( $this, 'membership_attributes' ) );
|
31 |
+
add_action( 'save_post', array( $this, 'save_details' ) );
|
32 |
+
add_action( 'wpmem_admin_after_block_meta', array( $this, 'add_product_to_post' ), 10, 2 );
|
33 |
+
add_action( 'wpmem_admin_block_meta_save', array( $this, 'save_product_to_post' ), 10, 3 );
|
34 |
+
add_action( 'admin_footer', array( $this, 'enqueue_select2' ) );
|
35 |
+
add_filter( 'manage_users_columns', array( $this, 'user_columns' ) );
|
36 |
+
add_filter( 'manage_users_custom_column', array( $this, 'user_columns_content' ), 10, 3 );
|
37 |
+
add_action( 'admin_head', array( $this, 'post_columns_width' ) );
|
38 |
+
add_filter( 'manage_posts_columns', array( $this, 'post_columns' ) );
|
39 |
+
add_action( 'manage_posts_custom_column', array( $this, 'post_columns_content' ), 10, 2 );
|
40 |
+
add_filter( 'manage_pages_columns', array( $this, 'post_columns' ) );
|
41 |
+
add_action( 'manage_pages_custom_column', array( $this, 'post_columns_content' ), 10, 2 );
|
42 |
+
foreach( $wpmem->post_types as $key => $val ) {
|
43 |
+
add_filter( 'manage_' . $key . '_posts_columns', array( $this, 'post_columns' ) );
|
44 |
+
add_action( 'manage_' . $key . '_posts_custom_column', array( $this, 'post_columns_content' ), 10, 2 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
|
47 |
+
add_filter( 'wpmem_user_profile_tabs', array( $this, 'user_profile_tabs' ), 1 );
|
48 |
+
add_action( 'wpmem_user_profile_tabs_content', array( $this, 'user_profile_tab_content' ), 10 );
|
49 |
+
|
50 |
+
add_filter( 'wpmem_views_users', array( $this, 'user_views' ), 10, 2 );
|
51 |
+
add_filter( 'wpmem_query_where', array( $this, 'query_where' ), 10, 2 );
|
52 |
+
|
53 |
$this->default_products = $wpmem->membership->get_default_products();
|
54 |
}
|
55 |
|
includes/class-wp-members.php
CHANGED
@@ -398,11 +398,14 @@ class WP_Members {
|
|
398 |
$this->forms = new WP_Members_Forms; // Load forms.
|
399 |
$this->api = new WP_Members_API; // Load api.
|
400 |
$this->shortcodes = new WP_Members_Shortcodes(); // Load shortcodes.
|
401 |
-
$this->membership = new WP_Members_Products(); // Load membership plans
|
402 |
$this->email = new WP_Members_Email; // Load email functions
|
403 |
$this->user = new WP_Members_User( $this ); // Load user functions.
|
404 |
$this->menus = new WP_Members_Menus();
|
405 |
$this->dialogs = new WP_Members_Dialogs();
|
|
|
|
|
|
|
|
|
406 |
if ( $this->clone_menus ) {
|
407 |
$this->menus_clone = new WP_Members_Clone_Menus(); // Load clone menus.
|
408 |
}
|
@@ -466,7 +469,6 @@ class WP_Members {
|
|
466 |
// Add actions.
|
467 |
|
468 |
add_action( 'init', array( $this, 'load_textdomain' ) );
|
469 |
-
add_action( 'init', array( $this->membership, 'add_cpt' ), 0 ); // Adds membership plans custom post type.
|
470 |
add_action( 'widgets_init', array( $this, 'widget_init' ) ); // initializes the widget
|
471 |
add_action( 'rest_api_init', array( $this, 'rest_init' ) );
|
472 |
add_action( 'pre_get_posts', array( $this, 'do_hide_posts' ), 20 );
|
@@ -478,7 +480,7 @@ class WP_Members {
|
|
478 |
add_action( 'wp_footer', array( $this, 'invisible_captcha' ) );
|
479 |
|
480 |
if ( is_admin() ) {
|
481 |
-
add_action( 'init', array( $this, 'load_admin'
|
482 |
}
|
483 |
|
484 |
if ( is_user_logged_in() ) {
|
@@ -525,6 +527,11 @@ class WP_Members {
|
|
525 |
add_filter( 'get_next_post_where', array( $this, 'filter_get_adjacent_post_where' ) );
|
526 |
add_filter( 'allow_password_reset', array( $this->user, 'no_reset' ) ); // no password reset for non-activated users
|
527 |
|
|
|
|
|
|
|
|
|
|
|
528 |
// If registration is moderated, check for activation (blocks backend login by non-activated users).
|
529 |
if ( 1 == $this->mod_reg ) {
|
530 |
add_filter( 'authenticate', array( $this->user, 'check_activated' ), 99, 3 );
|
@@ -641,7 +648,6 @@ class WP_Members {
|
|
641 |
require_once( $this->path . 'includes/class-wp-members-email.php' );
|
642 |
require_once( $this->path . 'includes/class-wp-members-forms.php' );
|
643 |
require_once( $this->path . 'includes/class-wp-members-menus.php' );
|
644 |
-
require_once( $this->path . 'includes/class-wp-members-products.php' );
|
645 |
require_once( $this->path . 'includes/class-wp-members-pwd-reset.php' );
|
646 |
require_once( $this->path . 'includes/class-wp-members-shortcodes.php' );
|
647 |
require_once( $this->path . 'includes/class-wp-members-user.php' );
|
@@ -651,10 +657,14 @@ class WP_Members {
|
|
651 |
require_once( $this->path . 'includes/api/api.php' );
|
652 |
require_once( $this->path . 'includes/api/api-email.php' );
|
653 |
require_once( $this->path . 'includes/api/api-forms.php' );
|
654 |
-
require_once( $this->path . 'includes/api/api-products.php' );
|
655 |
require_once( $this->path . 'includes/api/api-users.php' );
|
656 |
require_once( $this->path . 'includes/api/api-utilities.php' );
|
657 |
|
|
|
|
|
|
|
|
|
|
|
658 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
659 |
require_once( $this->path . 'includes/cli/class-wp-members-cli.php' );
|
660 |
require_once( $this->path . 'includes/cli/class-wp-members-cli-user.php' );
|
398 |
$this->forms = new WP_Members_Forms; // Load forms.
|
399 |
$this->api = new WP_Members_API; // Load api.
|
400 |
$this->shortcodes = new WP_Members_Shortcodes(); // Load shortcodes.
|
|
|
401 |
$this->email = new WP_Members_Email; // Load email functions
|
402 |
$this->user = new WP_Members_User( $this ); // Load user functions.
|
403 |
$this->menus = new WP_Members_Menus();
|
404 |
$this->dialogs = new WP_Members_Dialogs();
|
405 |
+
|
406 |
+
if ( 1 == $this->enable_products ) {
|
407 |
+
$this->membership = new WP_Members_Products(); // Load membership plans
|
408 |
+
}
|
409 |
if ( $this->clone_menus ) {
|
410 |
$this->menus_clone = new WP_Members_Clone_Menus(); // Load clone menus.
|
411 |
}
|
469 |
// Add actions.
|
470 |
|
471 |
add_action( 'init', array( $this, 'load_textdomain' ) );
|
|
|
472 |
add_action( 'widgets_init', array( $this, 'widget_init' ) ); // initializes the widget
|
473 |
add_action( 'rest_api_init', array( $this, 'rest_init' ) );
|
474 |
add_action( 'pre_get_posts', array( $this, 'do_hide_posts' ), 20 );
|
480 |
add_action( 'wp_footer', array( $this, 'invisible_captcha' ) );
|
481 |
|
482 |
if ( is_admin() ) {
|
483 |
+
add_action( 'init', array( $this, 'load_admin' ) ); // @todo Check user role to load correct dashboard
|
484 |
}
|
485 |
|
486 |
if ( is_user_logged_in() ) {
|
527 |
add_filter( 'get_next_post_where', array( $this, 'filter_get_adjacent_post_where' ) );
|
528 |
add_filter( 'allow_password_reset', array( $this->user, 'no_reset' ) ); // no password reset for non-activated users
|
529 |
|
530 |
+
// If memberships are enabled.
|
531 |
+
if ( 1 == $this->enable_products ) {
|
532 |
+
add_action( 'init', array( $this->membership, 'add_cpt' ), 0 ); // Adds membership plans custom post type.
|
533 |
+
}
|
534 |
+
|
535 |
// If registration is moderated, check for activation (blocks backend login by non-activated users).
|
536 |
if ( 1 == $this->mod_reg ) {
|
537 |
add_filter( 'authenticate', array( $this->user, 'check_activated' ), 99, 3 );
|
648 |
require_once( $this->path . 'includes/class-wp-members-email.php' );
|
649 |
require_once( $this->path . 'includes/class-wp-members-forms.php' );
|
650 |
require_once( $this->path . 'includes/class-wp-members-menus.php' );
|
|
|
651 |
require_once( $this->path . 'includes/class-wp-members-pwd-reset.php' );
|
652 |
require_once( $this->path . 'includes/class-wp-members-shortcodes.php' );
|
653 |
require_once( $this->path . 'includes/class-wp-members-user.php' );
|
657 |
require_once( $this->path . 'includes/api/api.php' );
|
658 |
require_once( $this->path . 'includes/api/api-email.php' );
|
659 |
require_once( $this->path . 'includes/api/api-forms.php' );
|
|
|
660 |
require_once( $this->path . 'includes/api/api-users.php' );
|
661 |
require_once( $this->path . 'includes/api/api-utilities.php' );
|
662 |
|
663 |
+
if ( 1 == $this->enable_products ) {
|
664 |
+
require_once( $this->path . 'includes/class-wp-members-products.php' );
|
665 |
+
require_once( $this->path . 'includes/api/api-products.php' );
|
666 |
+
}
|
667 |
+
|
668 |
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
669 |
require_once( $this->path . 'includes/cli/class-wp-members-cli.php' );
|
670 |
require_once( $this->path . 'includes/cli/class-wp-members-cli-user.php' );
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: cbutlerjr
|
|
3 |
Tags: access, authentication, content, login, member, membership, password, protect, register, registration, restriction, subscriber
|
4 |
Requires at least: 4.0
|
5 |
Tested up to: 6.0
|
6 |
-
Stable tag: 3.4.4
|
7 |
|
8 |
License: GPLv3
|
9 |
|
@@ -108,7 +108,7 @@ The FAQs are maintained at https://rocketgeek.com/plugins/wp-members/docs/faqs/
|
|
108 |
|
109 |
== Upgrade Notice ==
|
110 |
|
111 |
-
WP-Members 3.4.4 is a minor update.
|
112 |
|
113 |
|
114 |
== Screenshots ==
|
@@ -136,14 +136,6 @@ WP-Members 3.4.4 is a minor update. 3.4.4.2 is a compatibility release for users
|
|
136 |
|
137 |
* @todo WP-Members pluggable deprecated for use in theme functions.php (wpmem will be initialized when plugins are loaded). If you have any WP-Members pluggable functions that load in the theme functions.php, you'll need to move these to another location, such as a custom plugin file. Keep in mind, pluggable functions are no longer the preferred way of customizing (and have not been for many years) as most customizations, if not all, can be handled by using the plugin's filter and action hooks.
|
138 |
|
139 |
-
= 3.4.4.2 =
|
140 |
-
|
141 |
-
* Fixes an issue in the 3.4.4.1 release that calls an undefined function (wpmem_admin_options()).
|
142 |
-
|
143 |
-
= 3.4.4.1 =
|
144 |
-
|
145 |
-
* 3.4.4 is not compatible with WP-Members Advanced Options when redirect to login is used. This version corrects that issue by rolling back the change to only load membership restriction functions when the membership products setting is enabled. Users with WP-Members Advanced Options should update to 3.4.4.1.
|
146 |
-
|
147 |
= 3.4.4 =
|
148 |
|
149 |
* Adds excerpt to membership restricted content when excerpts are used and the user is logged in (should work the same as blocked content for a non-logged in user).
|
3 |
Tags: access, authentication, content, login, member, membership, password, protect, register, registration, restriction, subscriber
|
4 |
Requires at least: 4.0
|
5 |
Tested up to: 6.0
|
6 |
+
Stable tag: 3.4.4
|
7 |
|
8 |
License: GPLv3
|
9 |
|
108 |
|
109 |
== Upgrade Notice ==
|
110 |
|
111 |
+
WP-Members 3.4.4 is a minor update. Backup prior to upgrading is recommended, but rollback is possible. See changelog for a list of updates. Minimum WP version is 4.0.
|
112 |
|
113 |
|
114 |
== Screenshots ==
|
136 |
|
137 |
* @todo WP-Members pluggable deprecated for use in theme functions.php (wpmem will be initialized when plugins are loaded). If you have any WP-Members pluggable functions that load in the theme functions.php, you'll need to move these to another location, such as a custom plugin file. Keep in mind, pluggable functions are no longer the preferred way of customizing (and have not been for many years) as most customizations, if not all, can be handled by using the plugin's filter and action hooks.
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
= 3.4.4 =
|
140 |
|
141 |
* Adds excerpt to membership restricted content when excerpts are used and the user is logged in (should work the same as blocked content for a non-logged in user).
|
wp-members.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: WP-Members
|
4 |
Plugin URI: https://rocketgeek.com
|
5 |
Description: WP access restriction and user registration. For more information on plugin features, refer to <a href="https://rocketgeek.com/plugins/wp-members/docs/">the online Users Guide</a>. A <a href="https://rocketgeek.com/plugins/wp-members/quick-start-guide/">Quick Start Guide</a> is also available. WP-Members(tm) is a trademark of butlerblog.com.
|
6 |
-
Version: 3.4.4
|
7 |
Author: Chad Butler
|
8 |
Author URI: https://butlerblog.com/
|
9 |
Text Domain: wp-members
|
@@ -58,7 +58,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
58 |
}
|
59 |
|
60 |
// Initialize constants.
|
61 |
-
define( 'WPMEM_VERSION', '3.4.4
|
62 |
define( 'WPMEM_DB_VERSION', '2.3.0' );
|
63 |
define( 'WPMEM_PATH', plugin_dir_path( __FILE__ ) );
|
64 |
|
3 |
Plugin Name: WP-Members
|
4 |
Plugin URI: https://rocketgeek.com
|
5 |
Description: WP access restriction and user registration. For more information on plugin features, refer to <a href="https://rocketgeek.com/plugins/wp-members/docs/">the online Users Guide</a>. A <a href="https://rocketgeek.com/plugins/wp-members/quick-start-guide/">Quick Start Guide</a> is also available. WP-Members(tm) is a trademark of butlerblog.com.
|
6 |
+
Version: 3.4.4
|
7 |
Author: Chad Butler
|
8 |
Author URI: https://butlerblog.com/
|
9 |
Text Domain: wp-members
|
58 |
}
|
59 |
|
60 |
// Initialize constants.
|
61 |
+
define( 'WPMEM_VERSION', '3.4.4' );
|
62 |
define( 'WPMEM_DB_VERSION', '2.3.0' );
|
63 |
define( 'WPMEM_PATH', plugin_dir_path( __FILE__ ) );
|
64 |
|