# Получение постоянной ссылки на запись в WordPress
Функция get_post_permalink() позволяет получить постоянную ссылку для записи определенного типа в WordPress. Эта функция полезна, если вы работаете с кастомными типами записей.
## Как работает get_post_permalink()
### Использование функции
Функция get_post_permalink() позволяет получить URL записи. Вот основной синтаксис ее использования:
```php
get_post_permalink( $post, $leavename, $sample );
- $post (int|WP_Post) — ID записи или объект записи. По умолчанию используется глобальная запись.
- $leavename (true|false) — Необходимо ли сохранить имя записи. По умолчанию —
false, т.е. имя записи может измениться. - $sample (true|false) — Указывает, является ли ссылка "примером". По умолчанию —
false.
Возврат значения
Функция возвращает строку с URL постоянной ссылки на запись или false, если запись не существует.
Примеры использования
1. Получение ссылки на обычную запись
echo get_post_permalink( 1 ); // Вернёт URL записи с ID 1, например: https://example.com/?post_type=post&p=1
2. Получение ссылки на кастомный тип записи
echo get_post_permalink( 225 ); // Вернёт URL для кастомного типа записи, например: http://example.com/function/get_permalink
3. Сохранение имени записи
echo get_post_permalink( 225, true ); // Вернёт URL, сохраняя имя записи, например: http://example.com/function/%func%
Как работает код функции
Вот как выглядит код функции get_post_permalink() в WordPress:
function get_post_permalink( $post = 0, $leavename = false, $sample = false ) {
global $wp_rewrite;
$post = get_post( $post );
if ( ! $post ) {
return false; // Если запись не найдена, вернуть false
}
$post_link = $wp_rewrite->get_extra_permastruct( $post->post_type ); // Получение постоянной структуры ссылки
$slug = $post->post_name; // Имя записи
$force_plain_link = wp_force_plain_post_permalink( $post ); // Принудительное использование простого формата ссылки
$post_type = get_post_type_object( $post->post_type ); // Получение объекта типа записи
if ( $post_type->hierarchical ) {
$slug = get_page_uri( $post ); // Для иерархических типов получить URI страницы
}
if ( ! empty( $post_link ) && ( ! $force_plain_link || $sample ) ) {
if ( ! $leavename ) {
$post_link = str_replace( "%$post->post_type%", $slug, $post_link ); // Замена части ссылки
}
$post_link = home_url( user_trailingslashit( $post_link ) ); // Формирование полного URL с доменом
} else {
if ( $post_type->query_var && ( isset( $post->post_status ) && ! $force_plain_link ) ) {
$post_link = add_query_arg( $post_type->query_var, $slug, '' ); // Добавление параметров к URL
} else {
$post_link = add_query_arg(
array(
'post_type' => $post->post_type,
'p' => $post->ID,
),
''
);
}
$post_link = home_url( $post_link ); // Формирование полного URL
}
/** Фильтрация постоянной ссылки */
return apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
}
Примечания
- Функция использует глобальную переменную
$wp_rewrite, которая содержит информацию о переопределении URL в WordPress. - Если записи не существует, функция вернёт значение
false, что полезно для проверки перед использованием ссылки.
Изменения в версии WordPress
- С версии 3.0.0 — функция была введена.
- С версии 6.1.0 — функция возвращает
false, если запись не существует.
Теперь вы знаете, как использовать функцию get_post_permalink() для получения постоянных ссылок на записи в WordPress.