至少在 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;
}
谢谢。