我已经为一个网站建立了一个自定义查询,其中我有一个名为“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
功能,但什么都不起作用。它总是返回这个’
字符。