8

I have a arbitrary string and want to check if a post with that slug string exists in the site. I tried to find a way to list all slugs, but can't find such a thing. Thanks

  • The question is protected, so i can't reply. You can use if(is_page('slug-here')) { echo 'exists'; }. – Iago Jul 5 '15 at 12:43
7

This is what you're looking for, tested and I use it on my own sites:

function the_slug_exists($post_name) {
    global $wpdb;
    if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $post_name . "'", 'ARRAY_A')) {
        return true;
    } else {
        return false;
    }
}

You can then use it like this:

if (the_slug_exists('contact')) {
    // do something
}

Replace contact with whatever slug you want to test for.

  • 1
    should we use $wpdb_prepare to prepare escape the SQL statement? – insidepower Mar 14 '15 at 7:09
  • Any chance to modify the code to only target a specific custom post type? – Bruno Monteiro Mar 29 '16 at 12:58
  • Maybe if(the_slug_exists('contact') && post_type_exists('contact')) but then why not only use if(post_type_exists('contact')) ... – Jonas Lundman Oct 7 '17 at 15:45
  • Using WP_Query() is a more maintainable solution than a direct DB query. For example, $query = new WP_Query(array('name' => 'my-new-slug')); if ($query->post_count == 0) {// I am unique!} – Alex Steinberg Jun 24 '18 at 15:30
5

Do you mean post slug? You can try to make use of wp_unique_post_slug() that WP uses to generate those. If I remember right if slug you are trying to use is not unique it will be returned with numerical index appended.

  • 1
    sorry to reply so late. Yes post slug is the slug I want. Unfortunately I don't have the post_id which is required to use wp_unique_post_slug() – lulalala Aug 22 '11 at 1:43
  • I couldn't figure out how to use wp_unique_post_slug to do this anyway. It does really check to see if a slug exists, as much as create one. I could be wrong or misinterpreting something but in my testing it would not check if something already existed. – Nathan May 14 '14 at 23:20
4
$args = array('name' => $slugName, 'post_type' => $postType); 

$slug_query = new WP_Query($args);
echo "<pre>";
var_dump($slug_query);
exit;

You then have more than enough information to test if a post was returned or not, hope this helps.

  • 1
    How this will extract slug uniqueness? – Rahil Wazir Feb 12 '14 at 21:09
0
$your_slug = 'my-pageeeeeee';
$wpdb = $GLOBALS['wpdb'];



//==================FIRST method======================
    $id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_name = '%s' AND ( post_type = 'page' OR post_type = 'post') ", $slug) );
    if (!empty($id)) {
        //............
    }





//====================SECOND method======================
    $counts = $wpdb->get_var($wpdb->prepare("SELECT count(post_name) FROM ".$wpdb->posts ." WHERE post_name like '%s'", $slug) );
    if ($counts >=1 ) {
        //.............
    }
  • 1
    Please add proper explanation to your answers like what the code does and how it should be used – Pieter Goosen Nov 9 '15 at 4:24
0

How about this simpler approach?

$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
    echo 'No post exists with this slug.';

If a post doesn't exist for the given slug and post type provided then get_page_by_path() returns null.

Not the answer you're looking for? Browse other questions tagged or ask your own question.