Come verificare se uno slug esiste?

15 ago 2011, 13:09:15
Visualizzazioni: 22.7K
Voti: 13

Ho una stringa arbitraria e voglio verificare se esiste un post con quella stringa come slug nel sito. Ho cercato un modo per elencare tutti gli slug, ma non riesco a trovare nulla del genere. Grazie

1
Commenti

La domanda è protetta, quindi non posso rispondere. Puoi usare if(is_page('slug-here')) { echo 'exists'; }.

Iago Iago
5 lug 2015 15:43:43
Tutte le risposte alla domanda 5
6
11

Ecco quello che stai cercando, testato e che uso personalmente sui miei siti:

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

Puoi quindi usarla in questo modo:

if (the_slug_exists('contatto')) {
    // fai qualcosa
}

Sostituisci contatto con qualsiasi slug tu voglia verificare.

15 mag 2014 02:19:29
Commenti

dovremmo usare $wpdb_prepare per preparare e proteggere l'istruzione SQL?

insidepower insidepower
14 mar 2015 09:09:17

C'è la possibilità di modificare il codice per puntare solo a un specifico custom post type?

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

Forse if(the_slug_exists('contact') && post_type_exists('contact')) ma allora perché non usare solo if(post_type_exists('contact')) ...

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

Utilizzare WP_Query() è una soluzione più gestibile rispetto a una query diretta al database. Ad esempio, $query = new WP_Query(array('name' => 'my-new-slug')); if ($query->post_count == 0) {// Sono unico!}

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

Inoltre, il prefisso del database non è garantito che sia wp_

Flimm Flimm
2 set 2020 18:36:47

Può essere scritto così per utilizzare il prefisso corretto:("SELECT post_name FROM {$wpdb->prefix}posts WHERE post_name = '$post_name'", 'ARRAY_A'))

brasofilo brasofilo
10 nov 2020 23:46:53
Mostra i restanti 1 commenti
2

Intendi lo slug del post? Puoi provare a utilizzare wp_unique_post_slug() che WordPress usa per generarli. Se ricordo bene, se lo slug che stai cercando di usare non è unico, verrà restituito con un indice numerico aggiunto.

15 ago 2011 18:54:20
Commenti

scusami per la risposta tardiva. Sì, lo slug del post è quello che voglio. Purtroppo non ho il post_id che è necessario per usare wp_unique_post_slug()

lulalala lulalala
22 ago 2011 04:43:29

Non sono riuscito a capire come usare wp_unique_post_slug per fare questo. Non verifica realmente se uno slug esiste, quanto piuttosto ne crea uno nuovo. Potrei sbagliarmi o aver interpretato male qualcosa, ma nei miei test non verificava se qualcosa esisteva già.

Nathan Nathan
15 mag 2014 02:20:38
1

Che ne dici di questo approccio più semplice?

$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
    echo 'Non esiste alcun articolo con questo slug.';

Se non esiste un articolo per lo slug e il tipo di articolo forniti, allora get_page_by_path() restituisce null.

25 apr 2019 20:19:36
Commenti

Nota che il percorso non è esattamente la stessa cosa di uno slug (o post_name per usare il nome della colonna del database). Se un post ha un post genitore, il suo percorso sarà parent_slug/slug

Flimm Flimm
2 set 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;

A questo punto hai tutte le informazioni necessarie per verificare se è stato restituito un post o meno, spero che questo ti sia d'aiuto.

9 apr 2013 12:49:01
Commenti

Come verrà verificata l'univocità dello slug?

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



//==================PRIMO metodo======================
    $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)) {
        //............
    }





//====================SECONDO metodo======================
    $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
Commenti

Per favore aggiungi una spiegazione appropriata alle tue risposte, come cosa fa il codice e come dovrebbe essere utilizzato

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