Come verificare se uno slug esiste?
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

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.

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

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

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

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

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.

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()

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.

$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.

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