From 3ffb8257aff3a9f6f5a446e2a29609b9d7a6667a Mon Sep 17 00:00:00 2001 From: denisbaranov Date: Tue, 15 Dec 2020 17:25:24 +0200 Subject: [PATCH 1/3] New: The user role setting 'Avoid indexing profile by search engines' --- includes/admin/templates/role/profile.php | 8 ++++++++ includes/core/class-builtin.php | 2 +- includes/core/um-actions-profile.php | 22 +++++++++++++++++----- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/includes/admin/templates/role/profile.php b/includes/admin/templates/role/profile.php index 4aaf6da7..48a5115c 100644 --- a/includes/admin/templates/role/profile.php +++ b/includes/admin/templates/role/profile.php @@ -40,6 +40,14 @@ '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' => 'checkbox', + 'name' => '_um_profile_noindex', + 'label' => __( 'Avoid indexing profile by search engines', 'ultimate-member' ), + 'tooltip' => __( 'Hides the profile page for robots', 'ultimate-member' ), + 'value' => ! empty( $role['_um_profile_noindex'] ) ? $role['_um_profile_noindex'] : 0, ) ) ) )->render_form(); ?> diff --git a/includes/core/class-builtin.php b/includes/core/class-builtin.php index ed11148d..c5f87170 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/um-actions-profile.php b/includes/core/um-actions-profile.php index 67826f1b..b7880086 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -682,15 +682,27 @@ function um_profile_dynamic_meta_desc() { $privacy = get_user_meta( $user_id, 'profile_privacy', true ); if ( $privacy == __( 'Only me', 'ultimate-member' ) || $privacy == 'Only me' ) { + echo ''; + return; + } + + /** + * @see the user role setting "Avoid indexing profile by search engines" + */ + $role = UM()->roles()->get_priority_user_role( $user_id ); + $permissions = UM()->roles()->role_data( $role ); + if ( ! empty( $permissions['profile_noindex'] ) ) { + echo ''; return; } + /** + * @see the account setting "Avoid indexing my profile by search engines" + */ $noindex = get_user_meta( $user_id, 'profile_noindex', true ); - if ( ! empty( $noindex ) ) { ?> - - - - '; + return; } um_fetch_user( $user_id ); From 85b6bfdc5fc2b859798a60019ddc2f7002932c51 Mon Sep 17 00:00:00 2001 From: denisbaranov Date: Tue, 15 Dec 2020 19:14:34 +0200 Subject: [PATCH 2/3] Fix for the account field "Avoid indexing my profile by search engines" --- includes/core/um-filters-account.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/includes/core/um-filters-account.php b/includes/core/um-filters-account.php index c460102d..7b963c3a 100644 --- a/includes/core/um-filters-account.php +++ b/includes/core/um-filters-account.php @@ -43,4 +43,19 @@ function um_account_sanitize_data( $data ) { return $data; } -add_filter( 'um_account_pre_updating_profile_array', 'um_account_sanitize_data', 10, 1 ); \ No newline at end of file +add_filter( 'um_account_pre_updating_profile_array', 'um_account_sanitize_data', 10, 1 ); + + +/** + * Fix for the account field "Avoid indexing my profile by search engines" + * @since 2.1.14 [2020-12-15] + * @param bool $value + * @return int + */ +function um_account_profile_noindex_value( $value ) { + if ( ! is_numeric( $value ) ) { + $value = (int) get_user_meta( um_profile_id(), 'profile_noindex', true ); + } + return $value; +} +add_filter( 'um_profile_profile_noindex_empty__filter', 'um_account_profile_noindex_value' ); \ No newline at end of file From 0fdb5635eb622c2d1008b31afaf18b209b5f5142 Mon Sep 17 00:00:00 2001 From: denisbaranov Date: Tue, 22 Dec 2020 20:13:58 +0200 Subject: [PATCH 3/3] The general users setting "Avoid indexing profile by search engines" is added. The user role setting "Avoid indexing profile by search engines" is changed. --- includes/admin/core/class-admin-settings.php | 11 +++++ includes/admin/templates/role/profile.php | 12 +++-- includes/core/class-user.php | 46 ++++++++++++++++++++ includes/core/um-actions-profile.php | 28 ++++-------- 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index 53a8e21e..73e5e848 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 48a5115c..0b19c247 100644 --- a/includes/admin/templates/role/profile.php +++ b/includes/admin/templates/role/profile.php @@ -43,11 +43,17 @@ ), array( 'id' => '_um_profile_noindex', - 'type' => 'checkbox', + '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' ), - 'value' => ! empty( $role['_um_profile_noindex'] ) ? $role['_um_profile_noindex'] : 0, + '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-user.php b/includes/core/class-user.php index 08b31861..1c6138be 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 b7880086..e6b343c5 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -680,33 +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' ) { - echo ''; - return; - } - - /** - * @see the user role setting "Avoid indexing profile by search engines" - */ - $role = UM()->roles()->get_priority_user_role( $user_id ); - $permissions = UM()->roles()->role_data( $role ); - if ( ! empty( $permissions['profile_noindex'] ) ) { - echo ''; - return; + if( $user_id !== um_user('ID') ){ + um_fetch_user( $user_id ); } /** - * @see the account setting "Avoid indexing my profile by search engines" + * 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] */ - $noindex = get_user_meta( $user_id, 'profile_noindex', true ); - if ( ! empty( $noindex ) ) { + if ( UM()->user()->is_profile_noindex() ) { echo ''; return; } - um_fetch_user( $user_id ); - $locale = get_user_locale( $user_id ); $site_name = get_bloginfo( 'name' ); $twitter_site = '@' . sanitize_title( $site_name );