我在创建查询某些帖子的快捷码时遇到了一些问题。这是我的代码的基础:
function shortcode_equipment($atts, $content = null) {
$equipment = get_page_by_title($content, OBJECT, \'equipment\');
$loop = new WP_Query( array(
\'posts_per_page\' => 1,
\'post_type\' => \'equipment\',
\'page_id\' => $equipment->ID
) );
while( $loop->have_posts() ) { $loop->the_post();
*misc code*
wp_reset_postdata();
return $string;
}
}
add_shortcode( \'item\', \'shortcode_equipment\' );
现在,通常情况下,这对我99%的帖子都适用。它会根据[item]标题中的内容来查询帖子,然后显示相应的自定义工具提示/悬停效果。
然而,如果我的帖子标题中有一个撇号(例如:Mal的帖子),那么它就是破坏性的,只是查询自定义帖子类型中的最后一篇帖子。
那么,我该如何在帖子标题中使用撇号呢?
最合适的回答,由SO网友:Greg36 整理而成
标题Hello world!@#$%^*(),.;:\\
将起作用,但您输入的任何标题包含\' " < > &
字符不起作用,因为在$content
已转义的变量HTML entities 所以Mal的帖子变成了Mal’s Post
.
要绕过它,您可以使用sanitize_title
函数以及get_page_by_path
.
function shortcode_equipment($atts, $content = null) {
$path = sanitize_title($content);
$equipment = get_page_by_path( $path, OBJECT, \'equipment\');
其余代码与以前一样工作。