- 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;
This commit is contained in:
Mykyta Synelnikov
2023-06-12 15:22:35 +03:00
parent 49c0cf3555
commit 8057d06f81
5 changed files with 61 additions and 47 deletions
+13 -16
View File
@@ -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
* <?php add_filter( 'um_prepare_user_results_array', 'function_name', 10, 2 ); ?>
* @example
* <?php
* add_filter( 'um_prepare_user_results_array', 'my_prepare_user_results', 10, 2 );
* function my_prepare_user_results( $user_ids, $query ) {
* // your code here
* @since 2.1.3
* @hook um_prepare_user_results_array_meta
*
* @param {array} $user_ids Members Query Result.
* @param {array} $query_args Query arguments.
*
* @return {array} Query result.
*
* @example <caption>Remove some users where ID equals 10 and 12 from query.</caption>
* 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 );
+35 -17
View File
@@ -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
* <?php add_filter( 'um_prepare_user_results_array', 'function_name', 10, 2 ); ?>
* @example
* <?php
* add_filter( 'um_prepare_user_results_array', 'my_prepare_user_results', 10, 2 );
* function my_prepare_user_results( $user_ids, $query ) {
* // your code here
* @since 2.0
* @hook um_prepare_user_results_array
*
* @param {array} $user_ids Members Query Result.
* @param {array} $query_args Query arguments.
*
* @return {array} Query result.
*
* @example <caption>Remove some users where ID equals 10 and 12 from query.</caption>
* 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();
}
}
}
+2 -10
View File
@@ -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 ) ) {
+3 -4
View File
@@ -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 );
+8
View File
@@ -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 ) {