我最近制作了一小段代码,将一些Scribu的帖子扩展为帖子功能。
它的作用是防止在没有特定模板的网页上设置帖子关系。
if ( isset( $posttypes_info[ $p2p_binding['from'] ]['only_on'] ) ) {
if ( ! $_GET['post'] ) return false;
if ( isset( $posttypes_info[ $p2p_binding['from'] ]['only_on']['template'] ) ) {
$template = get_post_meta( $_GET['post'], '_wp_page_template', $single = true);
if ( $template != 'templates/' . $posttypes_info[$p2p_binding['from'] ]['only_on']['template'] . '.php' ) {
return false;
}
}
}
因此,在编辑帖子时,会获得帖子ID($ _GET [' post'])并检查该帖子是否具有所需的模板。如果不是,则返回false并且不设置关系。
?wordpress.dev/wp-admin/post.php 发表= 2 &安培;行动=编辑
现在我的一个朋友告诉我,我应该逃避$ _GET [' post']。我的第一个想法是,它没有使用从$ _GET [' post']中检索到的数据设置任何内容。它只会检查它是否已设置,如果是,它会尝试使用它来获取post meta。
所以我的问题是:我应该逃避$ _GET ['帖子']?如果是,为什么/为什么不
答案 0 :(得分:0)
如果你只是想检查post get param是否存在,你可以使用。
if(isset($_GET['post']))
我不确定我完全理解问题。你的意思是“逃避 $ _GET [ '后']“
答案 1 :(得分:0)
你的朋友可能在谈论的是$_GET['post']
的内容实际上可能有特殊字符,不能只包含在有效的URL中(如果你这样做,它可能会破坏)。要确保它有效,必须对其进行URL编码或“转义”。这可能就像空格(' '
)一样简单,必须在网址中将其编码为+
或%20
才能使其有效。
这是一个需要“转义”(编码)的特殊字符表:
http://webdesign.about.com/library/bl_url_encoding_table.htm
在PHP中,您可能只需要使用urlencode
函数:
http://php.net/manual/en/function.urlencode.php
编辑:总结在上面的OP示例代码中讨论“转义”必要性的评论......
get_post_meta
的WordPress文档说第一个参数应该是int
(数字),因此它应该足以确保$_GET['post']
真的是int
。因此,在这种情况下,“逃避”(例如通过urlencode
)似乎是不必要的。