Получение слага записи всегда зависит от того, находитесь ли вы в цикле или нет.
Пример 1: get_queried_object()
Проверить какой объект цикла сейчас установлен можно, например с помощью функции get_queried_object()
vardump(get_queried_object()) // печатаем данные
$post_id = get_queried_object()->ID // получаем ID
$post_slug = get_queried_object()->post_name // получаем slug
Функция vardump()
не является функцией ядра WordPress, она служит для удобной печати переменных, подробнее тут.
Если вы выводите посты на странице категории или таксономии, функция get_queried_object()
может отдать вам данные этой категории или таксономии.
Чтобы получить данные именно поста, вы должны находиться в цикле wp_query
или get_posts()
c установленной переменной setup_postdata()
. Для wp_query
она устанавливается автоматически, в то время как для get_posts()
вы должны установить ее самостоятельно.
Пример 2: get_post_field()
Еще одна удобная функция — get_post_field()
. С ее помощью так же можно получить любое необходимое вам поле данных поста.
Она принимает три параметра. Первый — название поля, данные которого нужно получить. Второй — ID поста, который берется из текущего цикла и является не обязательным. Третий — необязательный фильтр получаемого поля. Синтаксис:
get_post_field( $field, $post, $context ); // общий синтаксис
$post_slug = get_post_field( 'post_name', get_the_ID() ); // получаем slug
$post_slug = get_post_field( 'post_name' ); // тоже самое, указание ID не обязательно
Пример 3: глобальная переменная $post
Вы можете установить глобальную переменную $post
, если она не установлена, чтобы получить из нее необходимые данные. Синтаксис:
global $post; // устанавливаем переменную
vardump($post) // печатаем данные
$post_slug = $post->post_name; // получаем slug
Пример 4: вне цикла
Для всех случаев, когда вы находитесь вне нужного вам цикла, получить слаг конкретной записи вы можете зная его ID с помощью функции get_post()
$post_id = 10; // ID поста
$post = get_post($post_id); // получаем данные
vardump($post) // печатаем данные
$post_slug = $post->post_name; // получаем slug
Пример 5: с помощью регулярки
Вы можете получить слаг из ссылки с помощью регулярного выражения.
$link = 'https://artzolin.ru/wordpress-examples/how-to-get-post-slug-from-post-in-wordpress/';
$regexp = "/\/(?<slug>[\w\d\-]+)[\/]?$/";
$reglink = preg_match($regexp, $link, $match_link);
$post_slug = $match_link['slug'];
vardump($post_slug); // печатает how-to-get-post-slug-from-post-in-wordpress
В этом примере мы находим строку, состоящую из букв, цифр и дефиса до ближайшего знака слеш (/
). Наличие переданного закрывающего слеша в строку переменной $link
не повлияет на результат функции.
Разумеется, если переданныя ссылка будет содержать пагинацию, гет-запросы или еще что-то, регулярное выражение из этого примера не сработает.