Как проверить существование ЧПУ (slug)?

15 авг. 2011 г., 13:09:15
Просмотры: 22.7K
Голосов: 13

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

1
Комментарии

Вопрос защищён, поэтому я не могу ответить. Вы можете использовать if(is_page('slug-here')) { echo 'exists'; }.

Iago Iago
5 июл. 2015 г. 15:43:43
Все ответы на вопрос 5
6
11

Вот что вам нужно, проверено и используется на моих собственных сайтах:

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 на любой ярлык, который вы хотите проверить.

15 мая 2014 г. 02:19:29
Комментарии

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

insidepower insidepower
14 мар. 2015 г. 09:09:17

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

Bruno Monteiro Bruno Monteiro
29 мар. 2016 г. 15:58:47

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

Jonas Lundman Jonas Lundman
7 окт. 2017 г. 18:45:52

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

Alex Steinberg Alex Steinberg
24 июн. 2018 г. 18:30:31

Также, префикс базы данных не гарантированно будет wp_

Flimm Flimm
2 сент. 2020 г. 18:36:47

Это можно записать так для использования правильного префикса:("SELECT post_name FROM {$wpdb->prefix}posts WHERE post_name = '$post_name'", 'ARRAY_A'))

brasofilo brasofilo
10 нояб. 2020 г. 23:46:53
Показать остальные 1 комментариев
2

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

15 авг. 2011 г. 18:54:20
Комментарии

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

lulalala lulalala
22 авг. 2011 г. 04:43:29

Я так и не понял, как использовать wp_unique_post_slug для этой цели. Эта функция не столько проверяет существование слага, сколько создает новый. Возможно, я ошибаюсь или что-то неправильно интерпретирую, но в моих тестах она не проверяла, существует ли что-то уже.

Nathan Nathan
15 мая 2014 г. 02:20:38
1

Как насчет этого более простого подхода?

$post_exists = get_page_by_path( $slug, OBJECT, $post_type );
if ( ! $post_exists )
    echo 'Пост с таким ярлыком не существует.';

Если пост с указанным ярлыком и типом записи не существует, функция get_page_by_path() вернет null.

25 апр. 2019 г. 20:19:36
Комментарии

Обратите внимание, что путь (path) — это не совсем то же самое, что и ярлык (slug, или post_name, если использовать название столбца в базе данных). Если запись имеет родительскую запись, то её путь будет выглядеть как parent_slug/slug

Flimm Flimm
2 сент. 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;

Теперь у вас достаточно информации, чтобы проверить, был ли возвращен пост или нет. Надеюсь, это поможет.

9 апр. 2013 г. 12:49:01
Комментарии

Как это обеспечит уникальность слага?

Rahil Wazir Rahil Wazir
12 февр. 2014 г. 23:09:04
1
$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 ) {
        //.............
    }
8 нояб. 2015 г. 17:30:12
Комментарии

Пожалуйста, добавляйте подробные пояснения к своим ответам, например, что делает код и как его следует использовать

Pieter Goosen Pieter Goosen
9 нояб. 2015 г. 06:24:38