mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-11 18:56:10 +09:00
- added ability to use custom metakey as profile slug;
- important: use for this case required usermeta which cannot be empty
This commit is contained in:
@@ -7,41 +7,34 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||||||
|
|
||||||
if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Admin_Settings
|
* Class Admin_Settings
|
||||||
* @package um\admin\core
|
* @package um\admin\core
|
||||||
*/
|
*/
|
||||||
class Admin_Settings {
|
class Admin_Settings {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
public $settings_map;
|
public $settings_map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
public $settings_structure;
|
public $settings_structure;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var
|
* @var
|
||||||
*/
|
*/
|
||||||
private $previous_licenses;
|
private $previous_licenses;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var
|
* @var
|
||||||
*/
|
*/
|
||||||
private $need_change_permalinks;
|
private $need_change_permalinks;
|
||||||
|
|
||||||
|
|
||||||
private $gravatar_changed = false;
|
private $gravatar_changed = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin_Settings constructor.
|
* Admin_Settings constructor.
|
||||||
*/
|
*/
|
||||||
@@ -668,6 +661,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|||||||
'permalink_base' => array(
|
'permalink_base' => array(
|
||||||
'sanitize' => 'key',
|
'sanitize' => 'key',
|
||||||
),
|
),
|
||||||
|
'permalink_base_custom_meta' => array(
|
||||||
|
'sanitize' => 'text',
|
||||||
|
),
|
||||||
'display_name' => array(
|
'display_name' => array(
|
||||||
'sanitize' => 'key',
|
'sanitize' => 'key',
|
||||||
),
|
),
|
||||||
@@ -1014,15 +1010,24 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|||||||
// translators: %s: Profile page URL
|
// translators: %s: Profile page URL
|
||||||
'tooltip' => sprintf( __( 'Here you can control the permalink structure of the user profile URL globally e.g. %s<strong>username</strong>/', 'ultimate-member' ), trailingslashit( um_get_core_page( 'user' ) ) ),
|
'tooltip' => sprintf( __( 'Here you can control the permalink structure of the user profile URL globally e.g. %s<strong>username</strong>/', 'ultimate-member' ), trailingslashit( um_get_core_page( 'user' ) ) ),
|
||||||
'options' => array(
|
'options' => array(
|
||||||
'user_login' => __( 'Username', 'ultimate-member' ),
|
'user_login' => __( 'Username', 'ultimate-member' ),
|
||||||
'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ),
|
'name' => __( 'First and Last Name with \'.\'', 'ultimate-member' ),
|
||||||
'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ),
|
'name_dash' => __( 'First and Last Name with \'-\'', 'ultimate-member' ),
|
||||||
'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ),
|
'name_plus' => __( 'First and Last Name with \'+\'', 'ultimate-member' ),
|
||||||
'user_id' => __( 'User ID', 'ultimate-member' ),
|
'user_id' => __( 'User ID', 'ultimate-member' ),
|
||||||
'hash' => __( 'Unique hash string', 'ultimate-member' ),
|
'hash' => __( 'Unique hash string', 'ultimate-member' ),
|
||||||
|
'custom_meta' => __( 'Custom usermeta', 'ultimate-member' ),
|
||||||
),
|
),
|
||||||
'placeholder' => __( 'Select...', 'ultimate-member' ),
|
'placeholder' => __( 'Select...', 'ultimate-member' ),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'id' => 'permalink_base_custom_meta',
|
||||||
|
'type' => 'text',
|
||||||
|
'label' => __( 'Profile Permalink Base Custom Meta Key', 'ultimate-member' ),
|
||||||
|
'tooltip' => __( 'Specify the custom field meta key that you want to use as profile permalink base. Meta value should be unique.', 'ultimate-member' ),
|
||||||
|
'conditional' => array( 'permalink_base', '=', 'custom_meta' ),
|
||||||
|
'size' => 'medium',
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
'id' => 'display_name',
|
'id' => 'display_name',
|
||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
@@ -1048,6 +1053,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
|
|||||||
'label' => __( 'Display Name Custom Field(s)', 'ultimate-member' ),
|
'label' => __( 'Display Name Custom Field(s)', 'ultimate-member' ),
|
||||||
'tooltip' => __( 'Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site', 'ultimate-member' ),
|
'tooltip' => __( 'Specify the custom field meta key or custom fields seperated by comma that you want to use to display users name on the frontend of your site', 'ultimate-member' ),
|
||||||
'conditional' => array( 'display_name', '=', 'field' ),
|
'conditional' => array( 'display_name', '=', 'field' ),
|
||||||
|
'size' => 'medium',
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
'id' => 'author_redirect',
|
'id' => 'author_redirect',
|
||||||
|
|||||||
@@ -511,6 +511,7 @@ if ( ! class_exists( 'um\Config' ) ) {
|
|||||||
'disable_restriction_pre_queries' => 0,
|
'disable_restriction_pre_queries' => 0,
|
||||||
'uninstall_on_delete' => 0,
|
'uninstall_on_delete' => 0,
|
||||||
'permalink_base' => 'user_login',
|
'permalink_base' => 'user_login',
|
||||||
|
'permalink_base_custom_meta' => '',
|
||||||
'display_name' => 'full_name',
|
'display_name' => 'full_name',
|
||||||
'display_name_field' => '',
|
'display_name_field' => '',
|
||||||
'author_redirect' => 1,
|
'author_redirect' => 1,
|
||||||
|
|||||||
@@ -257,6 +257,18 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) {
|
|||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
$permalink_base = UM()->options()->get( 'permalink_base' );
|
$permalink_base = UM()->options()->get( 'permalink_base' );
|
||||||
|
if ( 'custom_meta' === $permalink_base ) {
|
||||||
|
$custom_meta = UM()->options()->get( 'permalink_base_custom_meta' );
|
||||||
|
if ( empty( $custom_meta ) ) {
|
||||||
|
// Set default permalink base if custom meta is empty.
|
||||||
|
$permalink_base = 'user_login';
|
||||||
|
$meta_key = 'um_user_profile_url_slug_' . $permalink_base;
|
||||||
|
} else {
|
||||||
|
$meta_key = $custom_meta;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$meta_key = 'um_user_profile_url_slug_' . $permalink_base;
|
||||||
|
}
|
||||||
|
|
||||||
$user_id = $wpdb->get_var(
|
$user_id = $wpdb->get_var(
|
||||||
$wpdb->prepare(
|
$wpdb->prepare(
|
||||||
@@ -266,7 +278,7 @@ if ( ! class_exists( 'um\core\Permalinks' ) ) {
|
|||||||
meta_value = %s
|
meta_value = %s
|
||||||
ORDER BY umeta_id ASC
|
ORDER BY umeta_id ASC
|
||||||
LIMIT 1",
|
LIMIT 1",
|
||||||
'um_user_profile_url_slug_' . $permalink_base,
|
$meta_key,
|
||||||
$slug
|
$slug
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -153,6 +153,14 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) {
|
|||||||
*/
|
*/
|
||||||
public function locate_user_profile() {
|
public function locate_user_profile() {
|
||||||
$permalink_base = UM()->options()->get( 'permalink_base' );
|
$permalink_base = UM()->options()->get( 'permalink_base' );
|
||||||
|
if ( 'custom_meta' === $permalink_base ) {
|
||||||
|
$custom_meta = UM()->options()->get( 'permalink_base_custom_meta' );
|
||||||
|
if ( empty( $custom_meta ) ) {
|
||||||
|
// Set default permalink base if custom meta is empty.
|
||||||
|
$permalink_base = 'user_login';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( um_queried_user() && um_is_core_page( 'user' ) ) {
|
if ( um_queried_user() && um_is_core_page( 'user' ) ) {
|
||||||
if ( 'user_login' === $permalink_base ) {
|
if ( 'user_login' === $permalink_base ) {
|
||||||
$user_id = username_exists( um_queried_user() );
|
$user_id = username_exists( um_queried_user() );
|
||||||
@@ -204,6 +212,10 @@ if ( ! class_exists( 'um\core\Rewrite' ) ) {
|
|||||||
$user_id = UM()->user()->user_exists_by_hash( um_queried_user() );
|
$user_id = UM()->user()->user_exists_by_hash( um_queried_user() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( 'custom_meta' === $permalink_base ) {
|
||||||
|
$user_id = UM()->user()->user_exists_by_custom_meta( um_queried_user() );
|
||||||
|
}
|
||||||
|
|
||||||
if ( in_array( $permalink_base, array( 'name', 'name_dash', 'name_dot', 'name_plus' ), true ) ) {
|
if ( in_array( $permalink_base, array( 'name', 'name_dash', 'name_dot', 'name_plus' ), true ) ) {
|
||||||
$user_id = UM()->user()->user_exists_by_name( um_queried_user() );
|
$user_id = UM()->user()->user_exists_by_name( um_queried_user() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -706,7 +706,19 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
|||||||
public function get_profile_slug( $user_id ) {
|
public function get_profile_slug( $user_id ) {
|
||||||
// Permalink base
|
// Permalink base
|
||||||
$permalink_base = UM()->options()->get( 'permalink_base' );
|
$permalink_base = UM()->options()->get( 'permalink_base' );
|
||||||
$profile_slug = get_user_meta( $user_id, "um_user_profile_url_slug_{$permalink_base}", true );
|
if ( 'custom_meta' === $permalink_base ) {
|
||||||
|
$custom_meta = UM()->options()->get( 'permalink_base_custom_meta' );
|
||||||
|
if ( empty( $custom_meta ) ) {
|
||||||
|
// Set default permalink base if custom meta is empty.
|
||||||
|
$permalink_base = 'user_login';
|
||||||
|
$meta_key = 'um_user_profile_url_slug_' . $permalink_base;
|
||||||
|
} else {
|
||||||
|
$meta_key = $custom_meta;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$meta_key = 'um_user_profile_url_slug_' . $permalink_base;
|
||||||
|
}
|
||||||
|
$profile_slug = get_user_meta( $user_id, $meta_key, true );
|
||||||
|
|
||||||
//get default username permalink if it's empty then return false
|
//get default username permalink if it's empty then return false
|
||||||
if ( empty( $profile_slug ) ) {
|
if ( empty( $profile_slug ) ) {
|
||||||
@@ -781,6 +793,17 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
|||||||
$user_in_url = $this->generate_user_hash( $user_id );
|
$user_in_url = $this->generate_user_hash( $user_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( 'custom_meta' === $permalink_base ) {
|
||||||
|
$custom_meta = UM()->options()->get( 'permalink_base_custom_meta' );
|
||||||
|
if ( empty( $custom_meta ) ) {
|
||||||
|
// Set default permalink base if custom meta is empty.
|
||||||
|
$permalink_base = 'user_login';
|
||||||
|
} else {
|
||||||
|
$user_in_url = rawurlencode( get_user_meta( $user_id, $custom_meta, true ) );
|
||||||
|
$user_in_url = apply_filters( 'um_custom_meta_permalink_base_generate_user_slug', $user_in_url, $user_id, $custom_meta );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Username
|
// Username
|
||||||
if ( 'user_login' === $permalink_base ) {
|
if ( 'user_login' === $permalink_base ) {
|
||||||
|
|
||||||
@@ -2391,6 +2414,52 @@ if ( ! class_exists( 'um\core\User' ) ) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $slug
|
||||||
|
*
|
||||||
|
* @return bool|int
|
||||||
|
*/
|
||||||
|
public function user_exists_by_custom_meta( $slug ) {
|
||||||
|
$permalink_base = UM()->options()->get( 'permalink_base' );
|
||||||
|
$custom_meta = UM()->options()->get( 'permalink_base_custom_meta' );
|
||||||
|
if ( empty( $custom_meta ) ) {
|
||||||
|
// Set default permalink base if custom meta is empty.
|
||||||
|
$permalink_base = 'user_login';
|
||||||
|
$meta_key = 'um_user_profile_url_slug_' . $permalink_base;
|
||||||
|
} else {
|
||||||
|
$meta_key = $custom_meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
$raw_value = $slug;
|
||||||
|
|
||||||
|
// Search by Profile Slug
|
||||||
|
$args = array(
|
||||||
|
'fields' => array( 'ID' ),
|
||||||
|
'meta_query' => array(
|
||||||
|
'relation' => 'OR',
|
||||||
|
array(
|
||||||
|
'key' => $meta_key,
|
||||||
|
'value' => strtolower( $raw_value ),
|
||||||
|
'compare' => '=',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'key' => 'um_user_profile_url_slug_' . $permalink_base,
|
||||||
|
'value' => strtolower( $raw_value ),
|
||||||
|
'compare' => '=',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
$ids = new \WP_User_Query( $args );
|
||||||
|
|
||||||
|
if ( $ids->total_users > 0 ) {
|
||||||
|
$um_user_query = current( $ids->get_results() );
|
||||||
|
return $um_user_query->ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method checks if a user exists or not in your site based on the user email as username
|
* This method checks if a user exists or not in your site based on the user email as username
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user