カスタム投稿タイプに関連付けられている分類色があります。私はすべての投稿メタと分類法をテーブルにリストしています。検索値に一致する投稿を検索するためのオプションがテーブルにあります。
検索キーが入力されると、投稿を取得するためにajax呼び出しを行います。
これは、検索文字列に一致するすべての投稿を取得するためのクエリです。
function get_query_posts_custom($post_id,$start,$length) {
//get_posts arguments
$args = array(
'post_type' => 'custom_post',
'post_status' => array('publish'),
'numberposts' => $length,
'offset' => $start,
'orderby' => 'menu_order',
'order' => 'asc',
'post_parent' => $_product->id
);
//get custom post taxonomy
$taxonomies = (array) maybe_unserialize(get_post_meta( $post_id, 'post_taxonomy', true));
if(empty($attributes)) {
$taxonomies = array();
}
$meta_keys = array('type','code','key');
if(!empty($search)) {
foreach($meta_keys as $meta_key) {
$meta_query[] = array(
'key' => $meta_key,
'value' => $search,
'compare' => 'LIKE';
);
}
$args['meta_query'] = $meta_query;
$tax_query = array();
foreach($taxonomies as $taxonomy) {
$tax_query = array(
'taxonomy' => $taxonomy;
'field' => 'slug';
'terms' => $search;
'operator' => 'LIKE';
);
}
if(count($tax_query)) {
$args['tax_query'] = $tax_query;
}
}
$results = get_posts($args);
return $results;
}
分類法の検索文字列に一致する投稿を取得する方法
私はそれがtax_queryに許可されている演算子だけが 'IN、NOT IN、ORおよびAND'であると言っているワードプレス関数参照を検索しました)LIKE演算子を使用できますか?
唯一の選択肢は、独自のSQLを posts_clauses
filterに書き込むことです。ここでは、変更、追加、削除などが可能なJOIN
、WHERE
、ORDER
などの句の配列を取得します。
これについての1つのメジャーメジャーメモは、常にグローバルな$wpdb
の prepare
関数を使うことです。そして、それはあなたのすべてのあなたの素敵なデータを消毒します。あなたはあなたの検索語カスタムクエリを通してどんな種類の注入も許可したくありません。 :)
他の答えで述べたように、あなたは単にtax_query
を使ってLIKE
_wise検索をすることはできません。
できることは、@ Eric Holmesによって提案されているようにフィルターを使用してSQL
ステートメントを変更することです。これは高度な手法です。あなたは自分がしていることを知る必要があります。あるいは、最初に(LIKE
を使用して)分類用語をロードしてから実際の投稿をロードするという別のクエリを作成することもできます。
これは、LIKE
と$search
変数との比較に一致する用語に関連する投稿をロードするための簡単なサンプルです。
// load the terms using LIKE
$termIds = get_terms([
'name__like' => $search,
'fields' => 'ids'
]);
// load the posts using the found term IDs
$posts = get_posts([
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'yourtaxonomy',
'field' => 'id',
'terms' => $termIds,
],
[
'taxonomy' => 'othertaxonomy',
'field' => 'id',
'terms' => $termIds,
],
],
]);
WP_Tax_Query それぞれ WP_Query
または get_posts()
の分類パラメータは、operator
引数には次のものだけを取ります。
'operator'文字列(オプション)
指定可能な値: 'AND'、 'IN'、または 'NOT IN'。
デフォルト値: 'IN'
そのため、LIKE
をoperator
として使用することはできません。