7

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
6

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.

protected by Community Apr 10 '13 at 12:42

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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