Получение постоянной ссылки на запись в WordPress

# Получение постоянной ссылки на запись в 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.

Leave a Reply

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