0

カスタム分類用語を調べる検索を実装しようとしています。「製品」と呼ばれるカスタム タイプと、「タイプ」と呼ばれるカスタム分類があります。私がワードプレスの標準フォームを使用している場合、カスタム分類用語で検索しないという事実を除いて、うまく機能します。

したがって、私が必要とするのは次のとおりです。 1.「m_type」分類用語を使用して WP 検索を行います。2.「スラッグ」ではなく、用語の「名前」を使用する必要があります。

少なくとも「スラッグ」を通して見えるようにするために、追加のクエリ変数を含めようとしていました。

このコード:

$wp_query->query['tax_query'] =  array(
        array(
            'taxonomy' => 'm_type',
            'field' => 'slug',
            'terms' => 'pen'
        )
    );

次の SQL を生成します。

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON 
(wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id 
IN (163) ) AND (((wp_posts.post_title LIKE '%pen%') OR (wp_posts.post_content LIKE 
'%pen%'))) AND wp_posts.post_type IN ('product') AND (wp_posts.post_status 
= 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') AND
 (wp_postmeta.meta_key = 'max_price' ) GROUP BY wp_posts.ID 
ORDER BY wp_postmeta.meta_value+0 DESC LIMIT 0, 60

したがって、基本的には、この種の分類 (*wp_term_relationships.term_taxonomy_id IN (163)*) を持つカスタム分類を追加し、投稿を検索しますが、実際には分類用語をクエリ文字列と比較することはありません。

多分私はこのすべてを間違っていますか?

4

1 に答える 1

1

このSQLクエリを使用して、タイトル/分類用語/コンテンツ検索に基づいて結果を取得しています.$searchは検索パラメータで、$_REQUEST['post_type']はpです

                SELECT DISTINCT(ID) FROM 
                $wpdb->terms AS terms 
                JOIN
                $wpdb->term_taxonomy as termtaxonomy
                JOIN
                $wpdb->term_relationships AS termrelationship
                JOIN
                $wpdb->posts AS posts

                ON terms.term_id = termtaxonomy.term_id &&
                   termrelationship.term_taxonomy_id = termtaxonomy.term_taxonomy_id &&
                   termrelationship.object_id = posts.ID
                WHERE terms.name LIKE '%".$search."%' OR posts.post_title LIKE       '%".$search."%' OR posts.post_content LIKE '%".$search."%' AND posts.post_type='".$_REQUEST['post_type']
于 2013-11-22T09:55:44.427 に答える