我正在使用以下代码按标题收集帖子。
protected function get_post_by_title($post_title, $output = OBJECT, $post_type = 'post' )
{
global $wpdb;
$post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $post_title, $post_type ));
if ( $post )
return get_page($post, $output);
return null;
}
一切正常,但不会发现标题中有单引号的帖子。请将以下内容视为$ post_title。
This is a test's post
$ wpdb-> prepare将返回如下所示的查询。
This is a test\\\'s post
哪个不会返回任何结果。有人可以帮我这个吗?
提前致谢
答案 0 :(得分:3)
你永远不应该与真实的标题比较。 Wordpress为您提供了创建slug的可能性,而没有像#34; "或"'"。然后你可以比较它们:
使用sanitize_title()
从标题中创建一个slug,然后您可以比较它们。
答案 1 :(得分:0)
我认为这应该解决问题,
DOC:http://in1.php.net/manual/en/mysqli.real-escape-string.php
protected function get_post_by_title($post_title, $output = OBJECT, $post_type = 'post' )
{
global $wpdb;
$post_title = mysqli_real_escape_string($post_title); //escape special meaning
$post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $post_title, $post_type ));
if ( $post )
return get_page($post, $output);
return null;
}
编辑:
这可能不起作用,试试这个,
$post_title = addslashes($post_title);
让我知道哪一个适合你。