【发布时间】:2019-04-24 04:03:12
【问题描述】:
我将文本存储在post_title 列中:
you’re
使用这个查询:
function ma_post_title_filter($where, &$wp_query) {
global $wpdb;
if ( $search_term = $wp_query->get( 'ma_search_post_title' ) ) {
$search_term = sanitize_text_field($search_term);
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . $wpdb->esc_like( $search_term ) . '%\'';
}
return $where;
}
如果$search_term 是you’re,它会工作并找到该列。但是当是you're时就不行了(因为是不同的单引号)。
如何改进查询,使you’re 和you're 都与you’re 匹配?
到目前为止我已经尝试过什么
- 在
$search_term上使用str_replace()将'替换为’。示例:str_replace('\'','’',$wpdb->esc_like( $search_term ))... 这种方法的问题是,如果存储的列是you're,我们将永远无法匹配。 - 在
'.$wpdb->posts.'.post_title上执行AND REPLACE将'替换为’...但似乎不起作用。
我知道理想的解决方案是将单引号的所有数据库实例调整为标准实例,但在我的情况下这是不可能的。
什么是正确的解决方案?
【问题讨论】:
-
到目前为止我所尝试的部分很可爱。这里应该是标准的。 +1
-
可能不适合,因为你不知道这是不是每次的搜索词,所以我删除了评论;)
-
您是否尝试将
’替换为',因为您的模式是'.post_title LIKE \'%'? -
@forpas 什么时候更换?请参阅我的两个示例方法和说明为什么它不起作用。谢谢。
-
你的模式是这样的:
'.post_title LIKE \'%'意味着你试图匹配',对吧?所以你申请str_replace('’', ''', $search_term)。