Получение слага записи всегда зависит от того, находитесь ли вы в цикле или нет.

Пример 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://zolin.digital/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 не повлияет на результат функции.

Разумеется, если переданныя ссылка будет содержать пагинацию, гет-запросы или еще что-то, регулярное выражение из этого примера не сработает.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *