0

少なくとも 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;
}

ありがとう。

4

1 に答える 1