質問編集履歴
1
関数に記述忘れがありました
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検索で使うという感じです
|