From 8057d06f81175e554ed94db4aab6bc4f080a7989 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Mon, 12 Jun 2023 15:22:35 +0300 Subject: [PATCH] - reviewed #769; - added `get_member_directory_id()` function for getting member directory ID based on page ID; - commented hooks 'um_prepare_user_results_array', 'um_prepare_user_results_array_meta' - added snippet fo hiding filters from member directory based on public or private visibility; --- includes/core/class-member-directory-meta.php | 29 +++++------ includes/core/class-member-directory.php | 52 +++++++++++++------ includes/core/class-shortcodes.php | 12 +---- includes/um-short-functions.php | 7 ++- templates/members.php | 8 +++ 5 files changed, 61 insertions(+), 47 deletions(-) diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php index cd54bd87..75378531 100644 --- a/includes/core/class-member-directory-meta.php +++ b/includes/core/class-member-directory-meta.php @@ -877,25 +877,22 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { $total_users = (int) $wpdb->get_var( 'SELECT FOUND_ROWS()' ); /** - * UM hook + * Filters the member directory query result when um_usermeta table is used. * - * @type filter - * @title um_prepare_user_results_array_meta - * @description Extend member directory query result - * @input_vars - * [{"var":"$result","type":"array","desc":"Members Query Result"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Remove some users where ID equals 10 and 12 from query. + * function my_custom_um_prepare_user_results_array_meta( $user_ids, $query_args ) { + * $user_ids = array_diff( $user_ids, array( 10, 12 ) ); * return $user_ids; * } - * ?> + * add_filter( 'um_prepare_user_results_array_meta', 'my_custom_um_prepare_user_results_array', 10, 2 ); */ $user_ids = apply_filters( 'um_prepare_user_results_array_meta', $user_ids, $query ); diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 7d9c40af..ec104cd9 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -2717,29 +2717,25 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $user_ids = ! empty( $user_query->results ) ? array_unique( $user_query->results ) : array(); /** - * UM hook + * Filters the member directory query result. * - * @type filter - * @title um_prepare_user_results_array - * @description Extend member directory query result - * @input_vars - * [{"var":"$result","type":"array","desc":"Members Query Result"}] - * @change_log - * ["Since: 2.0"] - * @usage - * - * @example - * Remove some users where ID equals 10 and 12 from query. + * function my_custom_um_prepare_user_results_array( $user_ids, $query_args ) { + * $user_ids = array_diff( $user_ids, array( 10, 12 ) ); * return $user_ids; * } - * ?> + * add_filter( 'um_prepare_user_results_array', 'my_custom_um_prepare_user_results_array', 10, 2 ); */ $user_ids = apply_filters( 'um_prepare_user_results_array', $user_ids, $this->query_args ); - $sizes = UM()->options()->get( 'cover_thumb_sizes' ); $this->cover_size = UM()->mobile()->isTablet() ? $sizes[1] : end( $sizes ); @@ -2831,5 +2827,27 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { wp_send_json_success( array( 'field_html' => $html ) ); } + + /** + * Get member directory id by page id. + * + * @param int $page_id Page ID. + * + * @return array Member directories ID. + */ + public function get_member_directory_id( $page_id ) { + $members_page = get_post( $page_id ); + if ( ! empty( $members_page ) && ! is_wp_error( $members_page ) ) { + if ( ! empty( $members_page->post_content ) ) { + preg_match_all( '/\[ultimatemember[^\]]*?form_id\=[\'"]*?(\d+)[\'"]*?/i', $members_page->post_content, $matches ); + if ( ! empty( $matches[1] ) && is_array( $matches[1] ) ) { + $member_directory_ids = array_map( 'absint', $matches[1] ); + return $member_directory_ids; + } + } + } + + return array(); + } } } diff --git a/includes/core/class-shortcodes.php b/includes/core/class-shortcodes.php index c87ac86d..e300d2e2 100644 --- a/includes/core/class-shortcodes.php +++ b/includes/core/class-shortcodes.php @@ -1260,7 +1260,7 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) { * * @return string */ - public function ultimatemember_searchform( $args = array(), $content = "" ) { + public function ultimatemember_searchform( $args = array(), $content = '' ) { if ( ! UM()->options()->get( 'members_page' ) ) { return ''; } @@ -1269,15 +1269,7 @@ if ( ! class_exists( 'um\core\Shortcodes' ) ) { $page_id = UM()->config()->permalinks['members']; if ( ! empty( $page_id ) ) { - $members_page = get_post( $page_id ); - if ( ! empty( $members_page ) && ! is_wp_error( $members_page ) ) { - if ( ! empty( $members_page->post_content ) ) { - preg_match_all( '/\[ultimatemember[^\]]*?form_id\=[\'"]*?(\d+)[\'"]*?/i', $members_page->post_content, $matches ); - if ( ! empty( $matches[1] ) && is_array( $matches[1] ) ) { - $member_directory_ids = array_map( 'absint', $matches[1] ); - } - } - } + $member_directory_ids = UM()->member_directory()->get_member_directory_id( $page_id ); } if ( empty( $member_directory_ids ) ) { diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index 9c181605..c8951eac 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -1515,10 +1515,10 @@ function um_can_view_field( $data ) { UM()->fields()->set_mode = ''; } - if ( isset( $data['public'] ) && UM()->fields()->set_mode != 'register' ) { + if ( isset( $data['public'] ) && 'register' !== UM()->fields()->set_mode ) { - $can_edit = false; - $current_user_roles = []; + $can_edit = false; + $current_user_roles = array(); if ( is_user_logged_in() ) { $can_edit = UM()->roles()->um_current_user_can( 'edit', um_user( 'ID' ) ); @@ -1563,7 +1563,6 @@ function um_can_view_field( $data ) { $can_view = apply_filters( 'um_can_view_field_custom', $can_view, $data ); break; } - } return apply_filters( 'um_can_view_field', $can_view, $data ); diff --git a/templates/members.php b/templates/members.php index ae295981..42229678 100644 --- a/templates/members.php +++ b/templates/members.php @@ -139,6 +139,14 @@ if ( ! empty( $search_filters ) ) { $search_filters = array_values( $search_filters ); } +// Hide filter fields based on the field visibility. +foreach ( $search_filters as $key => $filter ) { + $filter_data = UM()->fields()->get_field( $filter ); + if ( ! um_can_view_field( $filter_data ) ) { + unset( $search_filters[ $key ] ); + } +} + // Classes $classes = ''; if ( $search && $show_search ) {