0

至少在 MySQL 噩梦中度过几天希望有人能帮助我。我在为 WP 开发一个标签插件。

我的问题听起来很简单:为了保持 wordpress 数据库的清洁和高性能,我决定在一些额外的表中保存额外的字段(标签、标题、自由文本、url,...),而不是添加典型的元字段。现在搜索查询也必须包含这些字段。

几个小时后,我发现(地理标记 wordpress 示例):

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

0

他们在$where搜索中获取字符串,SQL而不是只搜索post_title变量,他们在 MySQL 查询字符串中添加geotag_citygeotag_stategeotag_country交叉检查其他匹配项。

这样,如果您搜索“纽约”,它将返回 geotag_city 匹配的结果以及标题。(在标题中列出所有可能的关键字并不是一种好的形式。)

于 2013-06-02T15:57:43.950 回答