Wordpress查询按标题问题发布

时间:2014-05-12 19:26:29

标签: php wordpress

我正在使用以下代码按标题收集帖子。

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

哪个不会返回任何结果。有人可以帮我这个吗?

提前致谢

2 个答案:

答案 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);

让我知道哪一个适合你。