变量中带有撇号的GET_PAGE_BY_TITLE

时间:2017-11-30 作者:Malachi Draven

我在创建查询某些帖子的快捷码时遇到了一些问题。这是我的代码的基础:

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的帖子),那么它就是破坏性的,只是查询自定义帖子类型中的最后一篇帖子。

那么,我该如何在帖子标题中使用撇号呢?

2 个回复
最合适的回答,由SO网友:Greg36 整理而成

标题Hello world!@#$%^*(),.;:\\ 将起作用,但您输入的任何标题包含\' " < > & 字符不起作用,因为在$content 已转义的变量HTML entities 所以Mal的帖子变成了Mal&#8217;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\');
其余代码与以前一样工作。

SO网友:Johansson

那里很可能发生了逃逸问题。在将标题传递给您的快捷码之前,请使用sanitize_title_for_query(), sanitize_title() 甚至esc_html():

$content   = sanitize_title_for_query( $content );
$equipment = get_page_by_title( $content, OBJECT, \'equipment\' );
可以找到有关转义数据的更多信息here.

结束

相关推荐

将footer.php添加到WordPress子主题

所以我用的主题是“催眠”我已经创建了一个子主题,但希望更改子主题中的一些页脚php,以便在有主题更新时,反向执行更改。这是我的Functions.php 在我的孩子主题\\ wp内容\\主题\\催眠孩子<?php // Exit if accessed directly if ( !defined( \'ABSPATH\' ) ) exit; // BEGIN ENQUEUE PARENT ACTION // AUTO GENERATED - Do not