MUS
MUS

Reputation: 1450

Wordpress query posts by title issue

I'm using below code to get posts by title.

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;

}

Everything is working fine, except it will not find the posts having single quote in title. Consider below as $post_title.

This is a test's post

$wpdb->prepare will return query something like below.

This is a test\\\'s post

Which will return no result. Can anyone please help me on this ?

Thanks in advance

Upvotes: 0

Views: 156

Answers (2)

xate
xate

Reputation: 6379

You should never compare with the real title. Wordpress offers you the possibility to create slugs without all those weird characters like " " or "'". Then you can compare them:

Use sanitize_title() to create a slug from your title, and then you can compare them.

Upvotes: 3

Nagendra Rao
Nagendra Rao

Reputation: 7152

I think this should fix the issue,

DOC: https://www.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;

}

edit:

That might not work, try this,

$post_title = addslashes($post_title);

Let me know which one works for you.

Upvotes: 0

Related Questions