diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php
index 2b1c00c8..34c27484 100644
--- a/includes/admin/core/class-admin-settings.php
+++ b/includes/admin/core/class-admin-settings.php
@@ -630,6 +630,17 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
'type' => 'checkbox',
'label' => __( 'Require a strong password? (when user resets password only)', 'ultimate-member' ),
'tooltip' => __( 'Enable or disable a strong password rules on password reset and change procedure', 'ultimate-member' ),
+ ),
+ array(
+ 'id' => 'profile_noindex',
+ 'type' => 'select',
+ 'size' => 'small',
+ 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ),
+ 'tooltip' => __( 'Hides the profile page for robots.', 'ultimate-member' ) . ' ' . __( 'This setting can be overridden by individual role settings.', 'ultimate-member' ),
+ 'options' => [
+ '1' => __( 'Yes', 'ultimate-member' ),
+ '' => __( 'No', 'ultimate-member' )
+ ]
)
)
),
diff --git a/includes/admin/templates/role/profile.php b/includes/admin/templates/role/profile.php
index 4aaf6da7..0b19c247 100644
--- a/includes/admin/templates/role/profile.php
+++ b/includes/admin/templates/role/profile.php
@@ -40,6 +40,20 @@
'label' => __( 'Can view/access private profiles?', 'ultimate-member' ),
'tooltip' => __( 'Can this role view private profiles?', 'ultimate-member' ),
'value' => ! empty( $role['_um_can_access_private_profile'] ) ? $role['_um_can_access_private_profile'] : 0,
+ ),
+ array(
+ 'id' => '_um_profile_noindex',
+ 'type' => 'select',
+ 'size' => 'medium',
+ 'name' => '_um_profile_noindex',
+ 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ),
+ 'tooltip' => __( 'Hides the profile page for robots.', 'ultimate-member' ) . ' ' . __( 'The default value depends on the general users settings.', 'ultimate-member' ),
+ 'options' => [
+ '' => __( 'Default', 'ultimate-member' ),
+ '1' => __( 'Yes', 'ultimate-member' ),
+ '2' => __( 'No', 'ultimate-member' )
+ ],
+ 'value' => ! empty( $role['_um_profile_noindex'] ) ? $role['_um_profile_noindex'] : '',
)
)
) )->render_form(); ?>
diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php
index 7f279366..55930ef6 100644
--- a/includes/core/class-builtin.php
+++ b/includes/core/class-builtin.php
@@ -1139,7 +1139,7 @@ if ( ! class_exists( 'um\core\Builtin' ) ) {
'required' => 0,
'public' => 1,
'editable' => 1,
- 'default' => '0',
+ 'default' => UM()->roles()->um_user_can( 'profile_noindex' ) ? '1' : '0',
'options' => array(
'0' => __( 'No', 'ultimate-member' ),
'1' => __( 'Yes', 'ultimate-member' ),
diff --git a/includes/core/class-user.php b/includes/core/class-user.php
index dc35f97d..30254a7f 100644
--- a/includes/core/class-user.php
+++ b/includes/core/class-user.php
@@ -1686,6 +1686,52 @@ if ( ! class_exists( 'um\core\User' ) ) {
}
+ /**
+ * This method checks if the profile indexing is disabled
+ *
+ * @since 2.1.14 [2020-12-22]
+ * @usage user()->is_profile_noindex(); ?>
+ *
+ * @return boolean Is the profile indexing disabled?
+ */
+ function is_profile_noindex(){
+ $user_id = $this->id;
+
+ $profile_noindex = false;
+
+ if ( !get_option( 'blog_public' ) ){
+ // Option "Search engine visibility" in [wp-admin > Settings > Reading]
+ $profile_noindex = true;
+
+ } elseif ( $this->is_private_profile( $user_id ) ){
+ // Setting "Profile Privacy" in [Account > Privacy]
+ $profile_noindex = true;
+
+ } elseif ( get_user_meta( $user_id, 'profile_noindex', true ) === '1' ){
+ // Setting "Avoid indexing my profile by search engines in [Account > Privacy]
+ $profile_noindex = true;
+
+ }
+
+ if( ! $profile_noindex ){
+ $role = UM()->roles()->get_priority_user_role( $user_id );
+ $permissions = UM()->roles()->role_data( $role );
+
+ if ( isset( $permissions['profile_noindex'] ) && $permissions['profile_noindex'] === '1' ) {
+ // Setting "Avoid indexing profile by search engines" in [wp-admin > Ultimate Member > User Roles > Edit Role]
+ $profile_noindex = true;
+
+ } elseif ( empty( $permissions['profile_noindex'] ) && UM()->options()->get( 'profile_noindex' ) === '1' ){
+ // Setting "Avoid indexing profile by search engines" in [wp-admin > Ultimate Member > Settings > General > Users]
+ $profile_noindex = true;
+
+ }
+ }
+
+ return apply_filters( 'um_user_is_profile_noindex', $profile_noindex, $this );
+ }
+
+
/**
* This method checks if give user profile is private.
*
diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php
index b5efa328..900b3de3 100644
--- a/includes/core/um-actions-profile.php
+++ b/includes/core/um-actions-profile.php
@@ -680,21 +680,23 @@ function um_profile_dynamic_meta_desc() {
$user_id = um_get_requested_user();
- $privacy = get_user_meta( $user_id, 'profile_privacy', true );
- if ( $privacy == __( 'Only me', 'ultimate-member' ) || $privacy == 'Only me' ) {
+ if( $user_id !== um_user('ID') ){
+ um_fetch_user( $user_id );
+ }
+
+ /**
+ * Settings by the priority:
+ * "Search engine visibility" in [wp-admin > Settings > Reading]
+ * "Profile Privacy" in [Account > Privacy]
+ * "Avoid indexing my profile by search engines in [Account > Privacy]
+ * "Avoid indexing profile by search engines" in [wp-admin > Ultimate Member > User Roles > Edit Role]
+ * "Avoid indexing profile by search engines" in [wp-admin > Ultimate Member > Settings > General > Users]
+ */
+ if ( UM()->user()->is_profile_noindex() ) {
+ echo '';
return;
}
- $noindex = get_user_meta( $user_id, 'profile_noindex', true );
- if ( ! empty( $noindex ) ) { ?>
-
-
-
-