From a619ee3ffcfce09ed99ac6768a4ed26e804e3717 Mon Sep 17 00:00:00 2001 From: andrewshuba Date: Fri, 12 Mar 2021 12:24:31 +0200 Subject: [PATCH] - added hooks for change a wp_um_metadata table - added hooks for user_location fields (hooks for comparison in text fields) --- includes/admin/core/class-admin-settings.php | 10 +- includes/core/class-member-directory-meta.php | 91 +++++-------------- includes/core/class-member-directory.php | 5 +- 3 files changed, 29 insertions(+), 77 deletions(-) diff --git a/includes/admin/core/class-admin-settings.php b/includes/admin/core/class-admin-settings.php index e1d8865e..4ab1ca45 100644 --- a/includes/admin/core/class-admin-settings.php +++ b/includes/admin/core/class-admin-settings.php @@ -99,15 +99,11 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { $metakeys = array(); foreach ( UM()->builtin()->all_user_fields as $all_user_field ) { - if ( $all_user_field['type'] == 'user_location' ) { - $metakeys[] = $all_user_field['metakey'] . '_lat'; - $metakeys[] = $all_user_field['metakey'] . '_lng'; - $metakeys[] = $all_user_field['metakey'] . '_url'; - } else { - $metakeys[] = $all_user_field['metakey']; - } + $metakeys[] = $all_user_field['metakey']; } + $metakeys = apply_filters( 'um_metadata_same_page_update_ajax', $metakeys, UM()->builtin()->all_user_fields ); + if ( is_multisite() ) { $sites = get_sites( array( 'fields' => 'ids' ) ); diff --git a/includes/core/class-member-directory-meta.php b/includes/core/class-member-directory-meta.php index 87211a39..de42a909 100644 --- a/includes/core/class-member-directory-meta.php +++ b/includes/core/class-member-directory-meta.php @@ -56,51 +56,25 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { function on_delete_custom_field( $metakey, $args ) { $metakeys = get_option( 'um_usermeta_fields', array() ); - if ( $args['type'] == 'user_location' ) { - if ( array_intersect( array( $metakey . '_lat', $metakey . '_lng', $metakey . '_url' ), $metakeys ) ) { - if ( false !== $searched = array_search( $metakey . '_lat', $metakeys ) ) { - unset( $metakeys[ $searched ] ); - } - if ( false !== $searched = array_search( $metakey . '_lng', $metakeys ) ) { - unset( $metakeys[ $searched ] ); - } - if ( false !== $searched = array_search( $metakey . '_url', $metakeys ) ) { - unset( $metakeys[ $searched ] ); - } + if ( in_array( $metakey, $metakeys ) ) { + unset( $metakeys[ array_search( $metakey, $metakeys ) ] ); - global $wpdb; + global $wpdb; - $wpdb->query( $wpdb->prepare( - "DELETE FROM {$wpdb->prefix}um_metadata - WHERE um_key = %s OR - um_key = %s OR - um_key = %s", - $metakey . '_lat', - $metakey . '_lng', - $metakey . '_url' - ) ); + $wpdb->delete( + "{$wpdb->prefix}um_metadata", + array( + 'um_key' => $metakey + ), + array( + '%s' + ) + ); - update_option( 'um_usermeta_fields', array_values( $metakeys ) ); - } - } else { - if ( in_array( $metakey, $metakeys ) ) { - unset( $metakeys[ array_search( $metakey, $metakeys ) ] ); - - global $wpdb; - - $wpdb->delete( - "{$wpdb->prefix}um_metadata", - array( - 'um_key' => $metakey - ), - array( - '%s' - ) - ); - - update_option( 'um_usermeta_fields', array_values( $metakeys ) ); - } + update_option( 'um_usermeta_fields', array_values( $metakeys ) ); } + + apply_filters( 'um_metadata_on_delete_custom_field', $metakeys, $metakey, $args ); } @@ -113,32 +87,12 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { function on_new_field_added( $metakey, $args ) { $metakeys = get_option( 'um_usermeta_fields', array() ); - if ( $args['type'] == 'user_location' ) { - $update = false; - if ( ! in_array( $metakey . '_lat', $metakeys ) ) { - $update = true; - $metakeys[] = $metakey . '_lat'; - } - - if ( ! in_array( $metakey . '_lng', $metakeys ) ) { - $update = true; - $metakeys[] = $metakey . '_lng'; - } - - if ( ! in_array( $metakey . '_url', $metakeys ) ) { - $update = true; - $metakeys[] = $metakey . '_url'; - } - - if ( $update ) { - update_option( 'um_usermeta_fields', array_values( $metakeys ) ); - } - } else { - if ( ! in_array( $metakey, $metakeys ) ) { - $metakeys[] = $metakey; - update_option( 'um_usermeta_fields', array_values( $metakeys ) ); - } + if ( ! in_array( $metakey, $metakeys ) ) { + $metakeys[] = $metakey; + update_option( 'um_usermeta_fields', array_values( $metakeys ) ); } + + apply_filters( 'um_metadata_on_new_field_added', $metakeys, $metakey, $args ); } @@ -291,7 +245,10 @@ if ( ! class_exists( 'um\core\Member_Directory_Meta' ) ) { $value = trim( stripslashes( $value ) ); - $this->where_clauses[] = $wpdb->prepare( "{$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value = %s", $field, $value ); + $compare = apply_filters( 'um_members_directory_filter_text', '=', $field ); + $value = apply_filters( 'um_members_directory_filter_text_meta_value', $value, $field ); + + $this->where_clauses[] = $wpdb->prepare( "{$join_slug}{$i}.um_key = %s AND {$join_slug}{$i}.um_value {$compare} %s", $field, $value ); if ( ! $is_default ) { $this->custom_filters_in_query[ $field ] = $value; diff --git a/includes/core/class-member-directory.php b/includes/core/class-member-directory.php index 6cee115e..dde98573 100644 --- a/includes/core/class-member-directory.php +++ b/includes/core/class-member-directory.php @@ -1596,13 +1596,12 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { case 'text': $value = stripslashes( $value ); - $field_query = array( 'relation' => 'OR', array( 'key' => $field, 'value' => trim( $value ), - 'compare' => 'LIKE', + 'compare' => apply_filters( 'um_members_directory_filter_text', '=', $field ) ), ); @@ -1871,7 +1870,7 @@ if ( ! class_exists( 'um\core\Member_Directory' ) ) { $field_query = array( 'key' => $field, 'value' => $value, - 'compare' => '=', + 'compare' => apply_filters( 'um_members_directory_filter_text', '=', $field ), ); break;