少なくとも MySQL の悪夢の中で何日も過ごして、誰かが私を助けてくれることを願っています。私はWPのタグ付けプラグインに取り組んでいます。
私の問題はとても簡単に思えます: wordpress データベースをクリーンで高性能に保つために、追加のフィールド (タグ、タイトル、フリー テキスト、URL など) をいくつかの追加のテーブルに保存し、典型的なメタ フィールドを追加しないことにしました。検索クエリには、これらのフィールドも含める必要があります。
数時間後、私はそれを見つけました(ワードプレスのジオテグの例):
add_filter('posts_join', 'geotag_search_join' );
add_filter('posts_where', 'geotag_search_where' );
add_filter('posts_groupby', 'geotag_search_groupby' );
ここまでは順調ですね。クエリ (geotag_search_where) を書き直す時が来ましたが、ここから悪夢が始まります...
カスタム テーブル名は「abc_tags」で、フィールドは「abc_title」および「abc_tags」です。「abc_tags」は、コンマで区切られたプレーン テキスト項目を含む長いテキスト フィールドです。
クエリでの preg_replace 操作がわかりません...誰かが助けてくれることを願っています。
function geotag_search_where( $where )
{
if( is_search() ) {
$where = preg_replace(
"/\(\s*post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(post_title LIKE $1) OR (geotag_city LIKE $1) OR (geotag_state LIKE $1) OR (geotag_country LIKE $1)", $where );
}
return $where;
}
ありがとう。