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

質問編集履歴

1

関数に記述忘れがありました

2019/10/09 11:47

投稿

amegahutteruyo
amegahutteruyo

スコア15

title CHANGED
File without changes
body CHANGED
@@ -37,7 +37,6 @@
37
37
  ```php
38
38
  $args = [];
39
39
  $args['post_type'] = 'testpost';
40
- $words_arr = get_meta_query_search( $search_str, 'or' );
41
40
  $args['meta_query'] = array(array(
42
41
  array(
43
42
  'key' => 'search_fields',
@@ -60,7 +59,6 @@
60
59
  /*
61
60
  WP_Query の $args に meta_query での条件を追加します
62
61
  カスタムフィールド search_fields に $search_str を含む記事を取得します
63
- いくつかの箇所で使うため関数化しています
64
62
  */
65
63
  function get_meta_query_search( $search_str, $join ){
66
64
  $search_arr = my_get_search_arr_from_str( $search_str );
@@ -73,6 +71,43 @@
73
71
  }
74
72
 
75
73
  /*
74
+ 検索に使うため、$search_str を配列に分解します
75
+ 先頭のシャープを削除し、検索に便利なよう全角半角変換します
76
+ */
77
+ function my_get_search_arr_from_str( $search_str ){
78
+
79
+ // 入力値を配列にする
80
+ $search_str = mb_convert_kana($search_str, 's');
81
+ $search_arr = preg_split("/[\s]+/", $search_str );
82
+
83
+ // 先頭がシャープの場合は1つだけ削除して配列へ
84
+ $word_arr = [];
85
+ $term_arr = [];
86
+ foreach( $search_arr as $search ){
87
+ $search = preg_replace("/( | )/", "", $search );
88
+ if( mb_substr($search, 0, 1) === '#' || mb_substr($search, 0, 1) === '#' ){
89
+ $search = mb_substr( $search , 1 , strlen($search)-1 );
90
+ if( $search !='' ){
91
+ $word_arr[] = $search;
92
+ }
93
+ }
94
+ else{
95
+ if( $search !='' ){
96
+ $word_arr[] = $search;
97
+ }
98
+ }
99
+ }
100
+
101
+ // 変換した配列を返す
102
+ $word_arr_convert = [];
103
+ foreach( $word_arr as $word ){
104
+ $word_arr_convert[] = mb_convert_kana($word, 'kvrn');
105
+ $word_arr_convert[] = mb_convert_kana($word, 'KVRN');
106
+ }
107
+ return $word_arr_convert;
108
+ }
109
+
110
+ /*
76
111
  meta_query 検索で REGEXP を使うため $arr を次のように変換します
77
112
  ['りんご','ばなな'] → 'りんご|ばなな'
78
113
  $type が 'or' なら OR検索で使うという感じです