# get_post_permalink()

URL: https://chugunov.pro/api-wordpress/functions/get_post_permalink/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 3.0.0.

## Сигнатура

```php
get_post_permalink( int|WP_Post $post, bool $leavename = false, bool $sample = false ): string|false
```

## Описание

Извлекает постоянную ссылку для записи произвольного типа.

## Параметры

- `$post` `int|WP_Post` — необязательный. ID записи или объект записи. По умолчанию — глобальная переменная $post.
- `$leavename` `bool` — необязательный, по умолчанию `false`. Сохранять ли имя записи.
- `$sample` `bool` — необязательный, по умолчанию `false`. Является ли это образцом постоянной ссылки.

## Возвращаемое значение

`string|false`

## Исходный код

Файл: `wp-includes/link-template.php:324`

```php
function get_post_permalink( $post = 0, $leavename = false, $sample = false ) {
	global $wp_rewrite;

	$post = get_post( $post );

	if ( ! $post ) {
		return 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 );
	}

	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 ) );
	} else {
		if ( $post_type->query_var && ( isset( $post->post_status ) && ! $force_plain_link ) ) {
			$post_link = add_query_arg( $post_type->query_var, $slug, '' );
		} else {
			$post_link = add_query_arg(
				array(
					'post_type' => $post->post_type,
					'p'         => $post->ID,
				),
				''
			);
		}
		$post_link = home_url( $post_link );
	}

	/**
	 * Filters the permalink for a post of a custom post type.
	 *
	 * @since 3.0.0
	 *
	 * @param string  $post_link The post's permalink.
	 * @param WP_Post $post      The post in question.
	 * @param bool    $leavename Whether to keep the post name.
	 * @param bool    $sample    Is it a sample permalink.
	 */
	return apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
}
```

## История изменений

- 6.1.0 — Returns false if the post does not exist.
- 3.0.0 — Introduced.

## Связанные

Использует: [`wp_force_plain_post_permalink`](https://chugunov.pro/api-wordpress/functions/wp_force_plain_post_permalink/), [`user_trailingslashit`](https://chugunov.pro/api-wordpress/functions/user_trailingslashit/), [`get_page_uri`](https://chugunov.pro/api-wordpress/functions/get_page_uri/), `WP_Rewrite::get_extra_permastruct`, [`add_query_arg`](https://chugunov.pro/api-wordpress/functions/add_query_arg/), [`home_url`](https://chugunov.pro/api-wordpress/functions/home_url/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_post`](https://chugunov.pro/api-wordpress/functions/get_post/), [`get_post_type_object`](https://chugunov.pro/api-wordpress/functions/get_post_type_object/).
Используется в: [`get_permalink`](https://chugunov.pro/api-wordpress/functions/get_permalink/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/get_post_permalink/
