【问题标题】:Building a WordPress search query that ignores punctuation?构建一个忽略标点符号的 WordPress 搜索查询?
【发布时间】:2017-02-07 07:34:47
【问题描述】:

我已经设置了这样的搜索查询:

<?php
$s = get_search_query();
$args = array(
    'post_type' => array('post'),
    'posts_per_page' => '10',
    'order' => 'DESC',
    'orderby' => 'date',
    's' => $s,
    'paged' => $paged
);
$query_search = new WP_Query($args);
if ($query_search->have_posts())
{
    while ($query_search->have_posts())
    {
        $query_search->the_post();
    }
}
wp_reset_postdata();
?>

效果很好,除非我正在搜索标题中包含标点符号的帖子。例如,如果标题是“Mark's Book”,则使用“mark's”和“marks”都不会返回任何结果。

如果我只是搜索“标记”,它会出现,但我希望上述任何一个关键字也能检索到帖子。

就使它与标点符号兼容而言,我是否缺少一些简单的东西?

【问题讨论】:

  • 尝试用这个's'=&gt; addslashes($s),替换's'=&gt; $s,

标签: php wordpress search punctuation


【解决方案1】:

默认 get_search_query() 传递 esc_attr() 上的数据,以确保将其放入 html 属性中是安全的。如果你想关闭 esc_attr() 然后试试这个代码,

$s = get_search_query( false );

也许对你有帮助

【讨论】:

  • 谢谢。这让我走到了一半。在我的帖子名称为“Mark's Book”的原始示例中......通过此更改,搜索“mark's”现在可以工作,但如果我省略撇号并使用“marks”进行搜索,我仍然没有得到任何结果。
【解决方案2】:

你可以这样试试:

$s = get_query_var('s');
$s = addslashes($s); //<-- even if you remove this the query will work
$args = array(
    'post_type' => array('post'),
    'posts_per_page' => '10',
    'order' => 'DESC',
    'orderby' => 'date',
    's' => $s,
    'paged' => $paged
);
$query_search = new WP_Query($args);
print_r($query_search->posts);

请注意:我假设查询字符串由 s 访问。
代码经过测试并且可以工作。
希望这会有所帮助!

【讨论】:

  • 感谢您的帮助!像另一个答案一样,这对我来说是一半。对于帖子名称“Mark's Book”,此代码现在可以使用搜索词“mark's”,但如果我不使用撇号“marks”进行搜索,它仍然不会返回任何结果。
猜你喜欢
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多