如何在WP_QUERY中按标题搜索带有特殊字符的帖子?

时间:2018-12-19 作者:Patrice Poliquin

我已经为一个网站建立了一个自定义查询,其中我有一个名为“Program”(即)的自定义帖子类型。

在这个自定义帖子类型上,假设我有分类“级别”,在这里我有一些选择。按照我构建代码的方式,您可以创建任意多个标题相同但分类不同的页面。在前端,我使用一个自定义的WP\\u查询来获取所有标题相同的帖子,并显示一个菜单来根据“级别”链接所有帖子。

但问题是,客户可以输入带有特殊字符的标题\' 喜欢Custom\'s title.

我的请求是这样的。

wp_reset_postdata();

// WP_Query arguments
$args = array(
    \'post_type\' => \'program\',
    \'title\' => esc_sql(get_the_title()),
    \'orderby\' => \'ID\',
    \'order\' => \'ASC\',
    \'tax_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'level\',
            \'field\'    => \'slug\',
            \'terms\'    => array(\'level-one\', \'level-two\', \'level-three\'),
        )
    )
);

// The Query
$breadcrumb = new WP_Query( $args );
当查询按标题搜索时,没有任何问题\'. 当我尝试用搜索标题时,它会中断\'.

看起来这会中断SQL查询,结果为0个帖子计数。

有没有一种方法可以创建一种可以说像%的过滤器,我可以只取标题的一部分,或者简单地做一些其他可以绕过\' ?

注意:我不能使用name 参数(https://codex.wordpress.org/Class_Reference/WP_Query#Search_Parameter) 因为正如你所看到的,我在许多帖子中都有相同的标题,所以这个slug看起来像这样

my-program-post
my-program-post-2
my-program-post-3
slug没有边框me,因为它是用于内部使用的。

提前谢谢你。在此期间,我将继续在周围寻找工作。

EDIT 1 : Aditionnal details如果您仔细查看生成的查询,我有这个。

SELECT SQL_CALC_FOUND_ROWS ri_posts.* FROM ri_posts LEFT JOIN ri_term_relationships ON (ri_posts.ID = ri_term_relationships.object_id) WHERE 1=1 AND ri_posts.post_title = \'Domaine de l’univers social\' AND ( ri_term_relationships.term_taxonomy_id IN (5,6,7) ) AND ri_posts.post_type = \'discipline\' AND (ri_posts.post_status = \'publish\' OR ri_posts.post_status = \'acf-disabled\' OR ri_posts.post_status = \'private\') GROUP BY ri_posts.ID ORDER BY ri_posts.ID ASC LIMIT 0, 999

如你所见,WordPress似乎改变了我的\' 所以我从我的查询中得到了0篇帖子。

如果我手动将其更改为:SELECT SQL_CALC_FOUND_ROWS ri_posts.* FROM ri_posts LEFT JOIN ri_term_relationships ON (ri_posts.ID = ri_term_relationships.object_id) WHERE 1=1 AND ri_posts.post_title = "Domaine de l\'univers social" AND ( ri_term_relationships.term_taxonomy_id IN (5,6,7) ) AND ri_posts.post_type = \'discipline\' AND (ri_posts.post_status = \'publish\' OR ri_posts.post_status = \'acf-disabled\' OR ri_posts.post_status = \'private\') GROUP BY ri_posts.ID ORDER BY ri_posts.ID ASC LIMIT 0, 999 它起作用了。

我还尝试创建%LIKE%过滤器或str_replace 功能,但什么都不起作用。它总是返回这个 字符。

1 个回复
SO网友:Patrice Poliquin

他们解决这个问题不是真正的问题。经过一些研究和测试,我发现这个人复制粘贴或写标题的方式是错误的\'

Ciel d<del>’</del>Afrique et pattes de gazelle

对好方法

Ciel d<del>\'</del>Afrique et pattes de gazelle

关闭此踏板。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post