Как проверить существование ЧПУ (slug)?
У меня есть произвольная строка, и я хочу проверить, существует ли запись с таким ЧПУ (slug) на сайте. Я пытался найти способ получить список всех ЧПУ, но не смог найти такой функционал. Спасибо

Вот что вам нужно, проверено и используется на моих собственных сайтах:
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;
}
}
Затем вы можете использовать это следующим образом:
if (the_slug_exists('contact')) {
// сделать что-то
}
Замените contact
на любой ярлык, который вы хотите проверить.

Следует ли использовать $wpdb_prepare для подготовки и экранирования SQL-запроса?

Есть ли возможность изменить код, чтобы он работал только с определенным пользовательским типом записи?

Может быть if(the_slug_exists('contact') && post_type_exists('contact'))
, но тогда почему бы не использовать просто if(post_type_exists('contact')) ...

Использование WP_Query() является более поддерживаемым решением, чем прямой запрос к БД. Например, $query = new WP_Query(array('name' => 'my-new-slug')); if ($query->post_count == 0) {// Я уникален!}

Вы имеете в виду ярлык записи? Вы можете попробовать использовать функцию wp_unique_post_slug()
, которую WordPress использует для их генерации. Если я правильно помню, если ярлык, который вы пытаетесь использовать, не уникален, он будет возвращен с добавленным числовым индексом.

извините за поздний ответ. Да, слаг записи - это именно тот слаг, который мне нужен. К сожалению, у меня нет post_id, который требуется для использования wp_unique_post_slug()

Как насчет этого более простого подхода?
$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
echo 'Пост с таким ярлыком не существует.';
Если пост с указанным ярлыком и типом записи не существует, функция get_page_by_path()
вернет null.

$your_slug = 'my-pageeeeeee';
$wpdb = $GLOBALS['wpdb'];
//==================ПЕРВЫЙ метод======================
$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)) {
//............
}
//====================ВТОРОЙ метод======================
$counts = $wpdb->get_var($wpdb->prepare("SELECT count(post_name) FROM ".$wpdb->posts ." WHERE post_name like '%s'", $slug) );
if ($counts >=1 ) {
//.............
}
