¿Cómo verificar si existe un slug?

15 ago 2011, 13:09:15
Vistas: 22.7K
Votos: 13

Tengo una cadena arbitraria y quiero verificar si existe una entrada con ese slug en el sitio. Intenté encontrar una manera de listar todos los slugs, pero no encuentro cómo hacerlo. Gracias

1
Comentarios

La pregunta está protegida, por lo que no puedo responder. Puedes usar if(is_page('slug-here')) { echo 'exists'; }.

Iago Iago
5 jul 2015 15:43:43
Todas las respuestas a la pregunta 5
6
11

Esto es lo que estás buscando, probado y lo uso en mis propios sitios:

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;
    }
}

Puedes usarlo así:

if (the_slug_exists('contacto')) {
    // hacer algo
}

Reemplaza contacto con el slug que quieras verificar.

15 may 2014 02:19:29
Comentarios

¿Deberíamos usar $wpdb_prepare para preparar y escapar la sentencia SQL?

insidepower insidepower
14 mar 2015 09:09:17

¿Hay alguna posibilidad de modificar el código para que solo afecte a un tipo de entrada personalizado específico?

Bruno Monteiro Bruno Monteiro
29 mar 2016 15:58:47

Quizás if(the_slug_exists('contact') && post_type_exists('contact')) pero entonces ¿por qué no usar solo if(post_type_exists('contact')) ...

Jonas Lundman Jonas Lundman
7 oct 2017 18:45:52

Usar WP_Query() es una solución más mantenible que una consulta directa a la base de datos. Por ejemplo, $query = new WP_Query(array('name' => 'my-new-slug')); if ($query->post_count == 0) {// ¡Soy único!}

Alex Steinberg Alex Steinberg
24 jun 2018 18:30:31

Además, el prefijo de la base de datos no está garantizado que sea wp_

Flimm Flimm
2 sept 2020 18:36:47

Se puede escribir así para usar el prefijo correcto:("SELECT post_name FROM {$wpdb->prefix}posts WHERE post_name = '$post_name'", 'ARRAY_A'))

brasofilo brasofilo
10 nov 2020 23:46:53
Mostrar los 1 comentarios restantes
2

¿Te refieres al slug de la publicación? Puedes intentar utilizar wp_unique_post_slug() que WordPress usa para generarlos. Si recuerdo correctamente, si el slug que intentas usar no es único, se devolverá con un índice numérico agregado.

15 ago 2011 18:54:20
Comentarios

lamento responder tan tarde. Sí, el slug de la publicación es el slug que quiero. Desafortunadamente no tengo el post_id que se requiere para usar wp_unique_post_slug()

lulalala lulalala
22 ago 2011 04:43:29

De todos modos no pude averiguar cómo usar wp_unique_post_slug para hacer esto. Realmente no verifica si un slug existe, sino que más bien crea uno. Podría estar equivocado o malinterpretando algo, pero en mis pruebas no verificaba si algo ya existía.

Nathan Nathan
15 may 2014 02:20:38
1

¿Qué tal este enfoque más sencillo?

$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
    echo 'No existe ningún post con este slug.';

Si no existe un post para el slug y tipo de post proporcionados, entonces get_page_by_path() devuelve null.

25 abr 2019 20:19:36
Comentarios

Ten en cuenta que la ruta no es exactamente lo mismo que un slug (o post_name para usar el nombre de la columna de la base de datos). Si una publicación tiene una publicación padre, entonces su ruta será parent_slug/slug

Flimm Flimm
2 sept 2020 18:35:37
1
$args = array('name' => $slugName, 'post_type' => $postType); 

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

Luego tienes más que suficiente información para comprobar si se ha devuelto un post o no, espero que esto te ayude.

9 abr 2013 12:49:01
Comentarios

¿Cómo esto extraerá la unicidad del slug?

Rahil Wazir Rahil Wazir
12 feb 2014 23:09:04
1
$your_slug = 'my-pageeeeeee';
$wpdb = $GLOBALS['wpdb'];



//==================PRIMER método======================
    $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)) {
        //............
    }





//====================SEGUNDO método======================
    $counts = $wpdb->get_var($wpdb->prepare("SELECT count(post_name) FROM ".$wpdb->posts ." WHERE post_name like '%s'", $slug) );
    if ($counts >=1 ) {
        //.............
    }
8 nov 2015 17:30:12
Comentarios

Por favor, agrega una explicación adecuada a tus respuestas, como qué hace el código y cómo debe utilizarse

Pieter Goosen Pieter Goosen
9 nov 2015 06:24:38