teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ソースコードの不具合修正

2016/12/24 04:46

投稿

退会済みユーザー
answer CHANGED
@@ -48,11 +48,11 @@
48
48
  $keywords = explode(' ', str_replace(' ', ' ', $search)); // "田中 一郎" -> "田中 一郎" -> "田中","一郎"
49
49
 
50
50
  foreach($keywords as $keyword) { // $keyword = "田中","一郎"
51
- $user_query->query_where .= $user_query->get_search_sql( $keyword, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM1.meta_value,UM2.meta_value)' ), true );
51
+ $user_query->query_where .= $user_query->get_search_sql( $keyword, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM2.meta_value,UM1.meta_value)' ), true );
52
52
  $key1 = $key1 . $keyword; // $key1 = "田中一郎"
53
53
  }
54
54
 
55
- $user_query->query_where .= $user_query->get_search_sql( $key1, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM1.meta_value,UM2.meta_value)' ), true );
55
+ $user_query->query_where .= $user_query->get_search_sql( $key1, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM2.meta_value,UM1.meta_value)' ), true );
56
56
 
57
57
  // デバッグ用コード ここから(消してOK)
58
58
  ?><pre><?php

1

後出しの条件に対応

2016/12/24 04:46

投稿

退会済みユーザー
answer CHANGED
@@ -23,4 +23,47 @@
23
23
  }
24
24
  }
25
25
  add_action( 'pre_user_query', 'extended_user_search' );
26
- ```
26
+ ```
27
+ ###追記
28
+ こんな感じかな。真面目にテストをしていないので、不具合があったらごめんなさい。
29
+ ```PHP
30
+ function extended_user_search( $user_query ) {
31
+ // Make sure this is only applied to user search
32
+ if ( $user_query->query_vars['search'] ){
33
+ $search = trim( $user_query->query_vars['search'], '*' );
34
+
35
+ ?><pre><?php
36
+ var_dump($search);
37
+ ?></pre><?php
38
+
39
+ if ( $_REQUEST['s'] == $search ){
40
+ global $wpdb;
41
+
42
+ $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM1 ON UM1.user_id = {$wpdb->users}.ID AND UM1.meta_key = 'first_name'";
43
+ $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM2 ON UM2.user_id = {$wpdb->users}.ID AND UM2.meta_key = 'last_name'";
44
+ $user_query->query_from .= " JOIN {$wpdb->usermeta} as UM3 ON UM3.user_id = {$wpdb->users}.ID AND UM3.meta_key = 'nickname'";
45
+
46
+ // "田中 一郎"
47
+ $user_query->query_where = 'WHERE 1=1';
48
+ $keywords = explode(' ', str_replace(' ', ' ', $search)); // "田中 一郎" -> "田中 一郎" -> "田中","一郎"
49
+
50
+ foreach($keywords as $keyword) { // $keyword = "田中","一郎"
51
+ $user_query->query_where .= $user_query->get_search_sql( $keyword, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM1.meta_value,UM2.meta_value)' ), true );
52
+ $key1 = $key1 . $keyword; // $key1 = "田中一郎"
53
+ }
54
+
55
+ $user_query->query_where .= $user_query->get_search_sql( $key1, array( 'user_login', 'user_email', 'user_nicename', 'UM1.meta_value', 'UM2.meta_value', 'UM3.meta_value','CONCAT(UM1.meta_value,UM2.meta_value)' ), true );
56
+
57
+ // デバッグ用コード ここから(消してOK)
58
+ ?><pre><?php
59
+ var_dump($user_query);
60
+ ?></pre><?php
61
+ // デバッグ用コード ここまで(消してOK)
62
+
63
+ }
64
+ }
65
+ }
66
+ add_action( 'pre_user_query', 'extended_user_search' );
67
+ ```
68
+ ※検索できるケース:"田中","一郎","田中 一郎","田中 一郎","田中一郎"
69
+ ※検索できないケース:"一郎 田中"