我有一些文本存储在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
,将'
替换为’
...但似乎不起作用。
那么问题的适当解决方案是什么?
’
替换为'
吗?因为你的模式是'.post_title LIKE \'%\'
。 - forpas.post_title LIKE \'%'
这意味着你想匹配'
,对吗?因此,你要应用str_replace('’', ''', $search_term)
。 - forpas