mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-11-10 13:10:36 +09:00
Version 1.0.21
This commit is contained in:
+108
-1
@@ -324,4 +324,111 @@ font-weight: normal;
|
||||
|
||||
.um-profile-note a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
- Profile nav-bar
|
||||
*/
|
||||
|
||||
.um-profile-nav {
|
||||
background: #444;
|
||||
}
|
||||
|
||||
.um-profile-nav-item.active a {
|
||||
background: #eee !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.um-profile-nav-item a {
|
||||
color: #fff !important;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
padding: 10px 20px;
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.um-profile-nav-item a:hover {
|
||||
background: #555;
|
||||
}
|
||||
|
||||
.um-profile-nav-item i {
|
||||
font-size: 20px;
|
||||
width: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.um-profile-subnav {
|
||||
background: #eee;
|
||||
padding: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.um-profile-subnav a {
|
||||
display: inline-block;
|
||||
color: #555;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
margin: 0 20px;
|
||||
}
|
||||
.um-profile-subnav a.active {color: #3BA1DA !important}
|
||||
.um-profile-subnav a:hover {color: #333}
|
||||
|
||||
.um-profile-subnav span {
|
||||
display: inline-block;
|
||||
margin: 0 0 0 8px;
|
||||
background: #ddd;
|
||||
padding: 1px 8px;
|
||||
color: #aaa !important;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
/*
|
||||
- Misc.
|
||||
*/
|
||||
|
||||
.um-item {
|
||||
padding: 20px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.um-item-action {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 16px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.um-item-action a {color: #ccc}
|
||||
.um-item-action a:hover {color: #999}
|
||||
|
||||
.um-item-link {padding-right: 40px}
|
||||
.um-item-link a {
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.um-item-link a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
.um-item-meta {color: #999}
|
||||
|
||||
.um-item-meta span {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.um-item-meta span:not(:last-child):after {
|
||||
position: relative;
|
||||
padding: 0px 4px 0px 7px;
|
||||
content: "•";
|
||||
}
|
||||
|
||||
.um-item-meta a {border-bottom: 1px solid #E0E0E0;color: #3BA1DA}
|
||||
.um-item-meta a:hover {border-bottom-color: #bbb}
|
||||
@@ -28,6 +28,23 @@ div.uimob960 .uimob960-hide
|
||||
|
||||
/********************************************/
|
||||
|
||||
div.uimob340 .um-profile-subnav {
|
||||
padding: 8px 15px;
|
||||
}
|
||||
|
||||
div.uimob340 .um-profile-subnav a {
|
||||
display: block;
|
||||
text-align: left;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
div.uimob340 .um-profile-subnav span {
|
||||
font-size: 12px;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
div.uimob340 .um-cover-overlay span.um-cover-overlay-t
|
||||
{
|
||||
display: none !important;
|
||||
@@ -219,6 +236,28 @@ div.uimob340 .um-account-meta {
|
||||
|
||||
/********************************************/
|
||||
|
||||
div.uimob500 .um-profile-nav-item i {
|
||||
font-size: 25px;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
div.uimob500 .um-profile-subnav {
|
||||
padding: 8px 15px;
|
||||
}
|
||||
|
||||
div.uimob500 .um-profile-subnav a {
|
||||
display: block;
|
||||
text-align: left;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
div.uimob500 .um-profile-subnav span {
|
||||
font-size: 12px;
|
||||
padding: 1px 6px;
|
||||
}
|
||||
|
||||
div.uimob500 .um-cover-overlay span.um-cover-overlay-t
|
||||
{
|
||||
display: none !important;
|
||||
@@ -396,6 +435,28 @@ div.uimob500 .um-account-meta {
|
||||
for 800px and below
|
||||
**/
|
||||
|
||||
div.uimob800 .um-profile-nav-item i {
|
||||
font-size: 25px;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
div.uimob800 .um-profile-subnav {
|
||||
padding: 8px 15px;
|
||||
}
|
||||
|
||||
div.uimob800 .um-profile-subnav a {
|
||||
display: block;
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
div.uimob800 .um-profile-subnav span {
|
||||
font-size: 12px;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
|
||||
div.uimob800 .um-account-main {
|
||||
width: 90%;
|
||||
max-width: 450px;
|
||||
|
||||
Vendored
+1
-4
File diff suppressed because one or more lines are too long
@@ -213,5 +213,31 @@ jQuery(document).ready(function() {
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery(document).on('click', '.um-ajax-action', function(e){
|
||||
e.preventDefault();
|
||||
var hook = jQuery(this).data('hook');
|
||||
var user_id = jQuery(this).data('user_id');
|
||||
var arguments = jQuery(this).data('arguments');
|
||||
|
||||
if ( jQuery(this).data('js-remove') ){
|
||||
jQuery(this).parents('.'+jQuery(this).data('js-remove')).fadeOut('fast');
|
||||
}
|
||||
|
||||
jQuery.ajax({
|
||||
url: ultimatemember_ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
action: 'ultimatemember_muted_action',
|
||||
hook: hook,
|
||||
user_id: user_id,
|
||||
arguments: arguments
|
||||
},
|
||||
success: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-2
@@ -30,9 +30,8 @@ class UM_Access {
|
||||
/***
|
||||
*** @get meta
|
||||
***/
|
||||
function get_meta() {
|
||||
function get_meta( $post_id ) {
|
||||
global $post;
|
||||
$post_id = $post->ID;
|
||||
$meta = get_post_custom( $post_id );
|
||||
foreach ($meta as $k => $v){
|
||||
if ( strstr($k, '_um_') ) {
|
||||
|
||||
@@ -56,11 +56,23 @@
|
||||
function um_access_post_settings() {
|
||||
global $post, $ultimatemember;
|
||||
|
||||
if ( !get_post_type() || !isset($post->ID) ) return;
|
||||
// woo commerce shop ID
|
||||
if( function_exists('is_shop') && is_shop() ) {
|
||||
|
||||
$post_id = get_option('woocommerce_shop_page_id');
|
||||
|
||||
} else {
|
||||
|
||||
if ( !get_post_type() || !isset($post->ID) ) return;
|
||||
|
||||
}
|
||||
|
||||
$args = $ultimatemember->access->get_meta();
|
||||
if ( !isset( $post_id ) )
|
||||
$post_id = $post->ID;
|
||||
|
||||
$args = $ultimatemember->access->get_meta( $post_id );
|
||||
extract($args);
|
||||
|
||||
|
||||
if ( !isset( $args['custom_access_settings'] ) || $args['custom_access_settings'] == 0 ) return;
|
||||
|
||||
$redirect_to = null;
|
||||
|
||||
@@ -92,4 +92,23 @@
|
||||
|
||||
if(is_array($output)){ print_r($output); }else{ echo $output; } die;
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @run an ajax action on the fly
|
||||
***/
|
||||
add_action('wp_ajax_nopriv_ultimatemember_muted_action', 'ultimatemember_muted_action');
|
||||
add_action('wp_ajax_ultimatemember_muted_action', 'ultimatemember_muted_action');
|
||||
function ultimatemember_muted_action(){
|
||||
global $ultimatemember;
|
||||
extract($_REQUEST);
|
||||
|
||||
if ( !um_current_user_can('edit', $user_id ) ) die( __('You can not edit this user') );
|
||||
|
||||
switch( $hook ) {
|
||||
default:
|
||||
do_action("um_run_ajax_function__{$hook}", $_REQUEST);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,9 +38,10 @@
|
||||
wp_set_password( $args['user_password'], $args['user_id'] );
|
||||
|
||||
delete_user_meta( $args['user_id'], 'reset_pass_hash');
|
||||
|
||||
delete_user_meta( $args['user_id'], 'reset_pass_hash_token');
|
||||
|
||||
do_action('um_after_changing_user_password', $args['user_id'] );
|
||||
|
||||
if ( is_user_logged_in() ) {
|
||||
wp_logout();
|
||||
}
|
||||
@@ -49,6 +50,19 @@
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @This is executed after changing password
|
||||
***/
|
||||
add_action('um_after_changing_user_password','um_after_changing_user_password');
|
||||
function um_after_changing_user_password( $user_id ) {
|
||||
global $ultimatemember;
|
||||
um_fetch_user( $user_id );
|
||||
|
||||
$ultimatemember->mail->send( um_user('user_email'), 'changedpw_email' );
|
||||
|
||||
um_reset_user();
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Error handler: reset password
|
||||
***/
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
<?php
|
||||
|
||||
/***
|
||||
*** @um_profile_content_{main_tab}
|
||||
***/
|
||||
add_action('um_profile_content_main','um_profile_content_main');
|
||||
function um_profile_content_main( $args ) {
|
||||
|
||||
extract( $args );
|
||||
|
||||
do_action("um_before_form", $args);
|
||||
|
||||
do_action("um_before_{$template}_fields", $args);
|
||||
|
||||
do_action("um_main_{$template}_fields", $args);
|
||||
|
||||
do_action("um_after_form_fields", $args);
|
||||
|
||||
do_action("um_after_{$template}_fields", $args);
|
||||
|
||||
do_action("um_after_form", $args);
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @update user's profile
|
||||
***/
|
||||
@@ -474,4 +496,59 @@
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/***
|
||||
*** @display the available profile tabs
|
||||
***/
|
||||
add_action('um_profile_navbar', 'um_profile_navbar');
|
||||
function um_profile_navbar( $args ) {
|
||||
global $ultimatemember;
|
||||
|
||||
$tabs = $ultimatemember->profile->tabs();
|
||||
|
||||
if ( count( $tabs ) == 1 ) return;
|
||||
|
||||
$active_tab = $ultimatemember->profile->active_tab;
|
||||
|
||||
?>
|
||||
|
||||
<div class="um-profile-nav">
|
||||
|
||||
<?php foreach( $tabs as $id => $tab ) {
|
||||
|
||||
$nav_link = $ultimatemember->permalinks->get_current_url(true);
|
||||
$nav_link = add_query_arg('profiletab', $id, $nav_link )
|
||||
?>
|
||||
|
||||
<div class="um-profile-nav-item <?php if ( $id == $active_tab ) echo 'active'; ?>"><a href="<?php echo $nav_link; ?>" title="<?php echo $tab['name']; ?>"><i class="<?php echo $tab['icon']; ?> uimob500-show uimob340-show uimob800-show"></i><span class="uimob500-hide uimob340-hide uimob800-hide"><?php echo $tab['name']; ?></span></a></div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<div class="um-clear"></div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
foreach( $tabs as $id => $tab ) {
|
||||
|
||||
if ( isset( $tab['subnav'] ) && $active_tab == $id ) {
|
||||
|
||||
$active_subnav = (isset($ultimatemember->profile->active_subnav)) ? $ultimatemember->profile->active_subnav : $tab['subnav_default'];
|
||||
|
||||
echo '<div class="um-profile-subnav">';
|
||||
foreach( $tab['subnav'] as $id => $subtab ) {
|
||||
|
||||
?>
|
||||
|
||||
<a href="<?php echo add_query_arg('subnav', $id ); ?>" class="<?php if ( $active_subnav == $id ) echo 'active'; ?>"><?php echo $subtab; ?></a>
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,6 +11,8 @@
|
||||
|
||||
if ( $changes['first_name'] && $changes['last_name'] ) {
|
||||
|
||||
wp_update_user( array( 'ID' => $ultimatemember->user->id, 'display_name' => $changes['first_name'] . ' ' . $changes['last_name'] ) );
|
||||
|
||||
$full_name = $changes['first_name'] . '.' . $changes['last_name'];
|
||||
|
||||
} else {
|
||||
@@ -21,8 +23,6 @@
|
||||
|
||||
$full_name = $ultimatemember->validation->safe_name_in_url( $full_name );
|
||||
|
||||
//die( print_r( $full_name ) );
|
||||
|
||||
/* duplicate or not */
|
||||
if ( $ultimatemember->user->user_has_metadata( 'full_name', $full_name ) ) {
|
||||
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
<?php
|
||||
|
||||
/***
|
||||
*** @Main tabs
|
||||
***/
|
||||
add_filter('um_profile_tabs', 'um_profile_tabs', 1 );
|
||||
function um_profile_tabs( $tabs ) {
|
||||
|
||||
$tabs['main'] = array(
|
||||
'name' => __('About','ultimatemember'),
|
||||
'icon' => 'um-faicon-user'
|
||||
);
|
||||
|
||||
return $tabs;
|
||||
}
|
||||
|
||||
/***
|
||||
*** @dynamic profile page title
|
||||
***/
|
||||
@@ -42,5 +56,5 @@
|
||||
}
|
||||
}
|
||||
|
||||
return utf8_decode( $title );
|
||||
return (strlen($title)!==strlen(utf8_decode($title))) ? $title : utf8_encode($title);
|
||||
}
|
||||
@@ -131,7 +131,7 @@ class UM_Permalinks {
|
||||
$profile_url = get_permalink($profile_url);
|
||||
|
||||
if ( um_get_option('permalink_base') == 'user_login' ) {
|
||||
$user_in_url = $ultimatemember->user->profile['user_login'];
|
||||
$user_in_url = um_user('user_login');
|
||||
}
|
||||
|
||||
if ( um_get_option('permalink_base') == 'user_id' ) {
|
||||
|
||||
@@ -4,8 +4,37 @@ class UM_Profile {
|
||||
|
||||
function __construct() {
|
||||
|
||||
add_action('template_redirect', array(&$this, 'active_tab'), 10002);
|
||||
|
||||
$this->active_tab = 'main';
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Global tabs
|
||||
***/
|
||||
function tabs(){
|
||||
return apply_filters('um_profile_tabs', $tabs = array() );
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Get active tab
|
||||
***/
|
||||
function active_tab() {
|
||||
|
||||
if ( get_query_var('profiletab') ) {
|
||||
$this->active_tab = get_query_var('profiletab');
|
||||
}
|
||||
|
||||
if ( get_query_var('subnav') ) {
|
||||
$this->active_subnav = get_query_var('subnav');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Show meta in profile
|
||||
***/
|
||||
function show_meta( $array ) {
|
||||
global $ultimatemember;
|
||||
$output = '';
|
||||
|
||||
@@ -6,6 +6,26 @@ class UM_Query {
|
||||
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Do custom queries
|
||||
***/
|
||||
function make( $args ) {
|
||||
|
||||
$defaults = array(
|
||||
'post_type' => 'post'
|
||||
);
|
||||
$args = wp_parse_args( $args, $defaults );
|
||||
|
||||
if ( isset( $args['post__in'] ) && empty( $args['post__in'] ) )
|
||||
return false;
|
||||
|
||||
extract( $args );
|
||||
|
||||
$custom_posts = new WP_Query();
|
||||
$custom_posts->query( $args );
|
||||
return $custom_posts;
|
||||
}
|
||||
|
||||
/***
|
||||
*** @Get last users
|
||||
***/
|
||||
|
||||
@@ -18,6 +18,8 @@ class UM_Rewrite {
|
||||
function query_vars($public_query_vars) {
|
||||
$public_query_vars[] = 'um_user';
|
||||
$public_query_vars[] = 'um_tab';
|
||||
$public_query_vars[] = 'profiletab';
|
||||
$public_query_vars[] = 'subnav';
|
||||
$public_query_vars[] = 'members_page';
|
||||
return $public_query_vars;
|
||||
}
|
||||
|
||||
+15
-10
@@ -376,7 +376,8 @@
|
||||
***/
|
||||
function um_edit_my_profile_uri() {
|
||||
global $ultimatemember;
|
||||
$url = $ultimatemember->permalinks->add_query( 'um_action', 'edit' );
|
||||
$url = $ultimatemember->permalinks->get_current_url(true);
|
||||
$url = add_query_arg( 'um_action', 'edit', $url );
|
||||
return $url;
|
||||
}
|
||||
|
||||
@@ -384,8 +385,7 @@
|
||||
*** @remove edit profile args from url
|
||||
***/
|
||||
function um_edit_my_profile_cancel_uri() {
|
||||
global $ultimatemember;
|
||||
$url = $ultimatemember->permalinks->remove_query( 'um_action', 'edit' );
|
||||
$url = remove_query_arg( 'um_action' );
|
||||
return $url;
|
||||
}
|
||||
|
||||
@@ -504,25 +504,30 @@
|
||||
global $ultimatemember;
|
||||
|
||||
if ( !is_user_logged_in() ) return false;
|
||||
|
||||
$return = 1;
|
||||
|
||||
um_fetch_user( get_current_user_id() );
|
||||
|
||||
switch($cap) {
|
||||
|
||||
case 'edit':
|
||||
if ( get_current_user_id() == $user_id && um_user('can_edit_profile') ) return true;
|
||||
if ( !um_user('can_edit_everyone') ) return false;
|
||||
if ( get_current_user_id() == $user_id && !um_user('can_edit_profile') ) return false;
|
||||
if ( um_user('can_edit_roles') && !in_array( $ultimatemember->query->get_role_by_userid( $user_id ), um_user('can_edit_roles') ) ) return false;
|
||||
if ( get_current_user_id() == $user_id && um_user('can_edit_profile') ) $return = 1;
|
||||
if ( !um_user('can_edit_everyone') ) $return = 0;
|
||||
if ( get_current_user_id() == $user_id && !um_user('can_edit_profile') ) $return = 0;
|
||||
if ( um_user('can_edit_roles') && !in_array( $ultimatemember->query->get_role_by_userid( $user_id ), um_user('can_edit_roles') ) ) $return = 0;
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if ( !um_user('can_delete_everyone') ) return false;
|
||||
if ( um_user('can_delete_roles') && !in_array( $ultimatemember->query->get_role_by_userid( $user_id ), um_user('can_delete_roles') ) ) return false;
|
||||
if ( !um_user('can_delete_everyone') ) $return = 0;
|
||||
if ( um_user('can_delete_roles') && !in_array( $ultimatemember->query->get_role_by_userid( $user_id ), um_user('can_delete_roles') ) ) $return = 0;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
um_fetch_user( $user_id );
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/***
|
||||
|
||||
@@ -457,6 +457,7 @@ class UM_User {
|
||||
|
||||
}
|
||||
|
||||
// hook for name changes
|
||||
do_action('um_update_profile_full_name', $changes );
|
||||
|
||||
// update user
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Plugin Name: Ultimate Member
|
||||
Plugin URI: http://ultimatemember.com/
|
||||
Description: Ultimate Member is a powerful community and membership plugin that allows you to create beautiful community and membership sites with WordPress
|
||||
Version: 1.0.19
|
||||
Version: 1.0.21
|
||||
Author: Ultimate Member
|
||||
Author URI: http://ultimatemember.com/
|
||||
*/
|
||||
|
||||
+19
-5
@@ -3,11 +3,11 @@ Author URI: https://ultimatemember.com/
|
||||
Plugin URI: https://ultimatemember.com/
|
||||
Contributors: ultimatemember
|
||||
Donate link:
|
||||
Tags: members, member, membership, community, communities, profile, profiles, registration, login, front-end registration, front-end login, social network, member directory, users, user, user profiles, user roles, conditional menus, role menus, restrict content, content protection, access control, search filters, conditional fields, conditional logic, custom fields, login page, user fields, form builder, profile builder, file uploads, star ratings, hide wp-admin, toolbar, logged-in users, sign in, sign up, role creation
|
||||
Tags: access control, community, communities, conditional fields, conditional logic, conditional menus, content protection, custom fields, file uploads, form builder, front-end login, front-end registration, hide wp-admin, login, login page, logged-in users, member, members, membership, member directory, profile, profiles, profile builder, registration, restrict content, role creation, role menus, search filters, sign in, sign up, social network, star ratings, toolbar, user, users, user fields, user profiles, user roles
|
||||
Requires at least: 4.1
|
||||
Tested up to: 4.1
|
||||
|
||||
Stable Tag: 1.0.19
|
||||
Stable Tag: 1.0.21
|
||||
|
||||
License: GNU Version 2 or Any Later Version
|
||||
|
||||
@@ -67,7 +67,7 @@ Our advanced drag and drop form builder makes it extremely easy to build unique
|
||||
|
||||
The plugin provides users with an account page where users can change their account settings. The account page allows users to control their privacy settings, change their password and delete their own account. Admins can alter what shows on the account page depending on the amount of control you want users to have over their accounts.
|
||||
|
||||
**User roles**
|
||||
**Custom user roles**
|
||||
|
||||
With Ultimate Member you can create your own user roles and apply different controls and permissions to each user role. This flexibility is perfect for site's that have multiple user types.
|
||||
|
||||
@@ -75,13 +75,13 @@ With Ultimate Member you can create your own user roles and apply different cont
|
||||
|
||||
The plugin allows you to create multiple member directories to allow people to easily search and find other users. The member directories are very flexible and you can control what user roles show in a directory; the order users appear in the directory; what search filters appear; what user roles can use the search filters and much more.
|
||||
|
||||
**Email Templates**
|
||||
**Custom e-mail templates**
|
||||
|
||||
The plugin provides a range of customizable text only email templates which are triggered depending on certain events (e.g welcome email, account activation, account deleted etc). Each email type can be turned on/off. The plugin also offers a range of optional admin notification emails so you can find out when a new user registers or if new user needs reviewed.
|
||||
|
||||
**Content restriction**
|
||||
|
||||
With Ultimate Member you can restrict content on a global on per page/post basis. You can restrict pages/posts so everyone can see the page/post; only logged out users can see the page/post or only logged in users can see the page/post (you can also restrict it to certain user roles). You can also set redirect urls for when people who are not allowed to access the page/post
|
||||
With Ultimate Member you can restrict content on a global or per page/post basis. You can restrict pages/posts so everyone can see the page/post; only logged out users can see the page/post or only logged in users can see the page/post (you can also restrict it to certain user roles). You can also set redirect urls for when people who are not allowed to access the page/post
|
||||
|
||||
**Conditional menus**
|
||||
|
||||
@@ -168,6 +168,20 @@ Yes. The plugin works fine with WordPress network / multisite now. In a recent u
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 1.0.21: January 24, 2015 =
|
||||
|
||||
* New: Added ajax action hook for development use
|
||||
* New: Extended profile hooks
|
||||
* New: you can restrict / apply access control to woocommerce shop page
|
||||
* Fixed: content restriction for woocommerce shop page
|
||||
|
||||
= 1.0.20: January 24, 2015 =
|
||||
|
||||
* New: Custom email is sent to user after resetting/changing password
|
||||
* New: Added action/filter hooks to profile
|
||||
* Tweak: Improved a few core functions
|
||||
* Fixed: Encoding issue with non-english sites fixed
|
||||
|
||||
= 1.0.19: January 23, 2015 =
|
||||
|
||||
* New: Border thickness option for members directory
|
||||
|
||||
+8
-11
@@ -8,25 +8,22 @@
|
||||
|
||||
<?php do_action('um_profile_header', $args ); ?>
|
||||
|
||||
<div class="um-profile-body">
|
||||
<?php do_action('um_profile_navbar', $args ); ?>
|
||||
|
||||
<?php
|
||||
|
||||
do_action("um_before_form", $args);
|
||||
|
||||
do_action("um_before_{$template}_fields", $args);
|
||||
$nav = $ultimatemember->profile->active_tab;
|
||||
$subnav = ( get_query_var('subnav') ) ? get_query_var('subnav') : 'default';
|
||||
|
||||
do_action("um_main_{$template}_fields", $args);
|
||||
print "<div class='um-profile-body $nav $nav-$subnav'>";
|
||||
|
||||
do_action("um_after_form_fields", $args);
|
||||
// Custom hook to display tabbed content
|
||||
do_action("um_profile_content_{$nav}", $args);
|
||||
do_action("um_profile_content_{$nav}_{$subnav}", $args);
|
||||
|
||||
do_action("um_after_{$template}_fields", $args);
|
||||
|
||||
do_action("um_after_form", $args);
|
||||
print "</div>";
|
||||
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
@@ -578,6 +578,37 @@ $this->sections[] = array(
|
||||
'Thanks,' . "\r\n" .
|
||||
'{site_name}',
|
||||
),
|
||||
|
||||
array(
|
||||
'id' => 'changedpw_email_on',
|
||||
'type' => 'switch',
|
||||
'title' => __( 'Password Changed Email' ),
|
||||
'default' => 1,
|
||||
'desc' => 'Whether to send the user an email when he request to reset password (Recommended, please keep on)',
|
||||
),
|
||||
|
||||
array(
|
||||
'id' => 'changedpw_email_sub',
|
||||
'type' => 'text',
|
||||
'title' => __( 'Password Changed Email' ),
|
||||
'subtitle' => __( 'Subject Line' ),
|
||||
'default' => 'Your {site_name} password has been changed',
|
||||
'required' => array( 'changedpw_email_on', '=', 1 ),
|
||||
'desc' => 'This is the subject line of the e-mail',
|
||||
),
|
||||
|
||||
array(
|
||||
'id' => 'changedpw_email',
|
||||
'type' => 'textarea',
|
||||
'title' => __( 'Password Changed Email' ),
|
||||
'subtitle' => __( 'Message Body' ),
|
||||
'required' => array( 'changedpw_email_on', '=', 1 ),
|
||||
'default' => 'Hi {display_name},' . "\r\n\r\n" .
|
||||
'You recently changed the password associated with your {site_name} account.' . "\r\n\r\n" .
|
||||
'If you did not make this change and believe your {site_name} account has been compromised, please contact us at the following email address: {admin_email}' . "\r\n\r\n" .
|
||||
'Thanks,' . "\r\n" .
|
||||
'{site_name}',
|
||||
),
|
||||
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user