get_post_permalink

Получает постоянную ссылку (УРЛ) на запись произвольного типа.

Эта функция используется в get_permalink(), когда нужно получить постоянную ссылку на произвольный тип записи.

✈ 1 раз = 0.000578с = медленно | 50000 раз = 5с = быстро
Хуки из функции:
post_type_link
Возвращает

Строку/WP_Error. УРЛ на запись.

Использование

get_post_permalink( $id, $leavename, $sample );
$id(число)
ID поста, ссылку на который нужно получить.
По умолчанию: ID текущего поста, который находится в цикле WordPress в данный момент
$leavename(логический)
Оставлять ли имя поста. true – не заменять плейсхолдер %post_type% на имя поста.
По умолчанию: false
$sample(логический)
true — это образец (пример) ссылки. На вывод не влияет, но передается в хук ‘post_type_link’.
По умолчанию: false

Примеры

#1 Выведем УРЛ на произвольный тип записи

echo get_permalink( 225 ); // http://wp-kama.ru/function/get_permalink

echo get_permalink( 225, true ); // http://wp-kama.ru/function/%func%

Код из


wp-includes/link-template.php

WP 4.7.2

<?php
function get_post_permalink( $id = 0, $leavename = false, $sample = false ) {
	global $wp_rewrite;

	$post = get_post($id);

	if ( is_wp_error( $post ) )
		return $post;

	$post_link = $wp_rewrite->get_extra_permastruct($post->post_type);

	$slug = $post->post_name;

	$draft_or_pending = get_post_status( $id ) && in_array( get_post_status( $id ), array( 'draft', 'pending', 'auto-draft', 'future' ) );

	$post_type = get_post_type_object($post->post_type);

	if ( $post_type->hierarchical ) {
		$slug = get_page_uri( $id );
	}

	if ( !empty($post_link) && ( !$draft_or_pending || $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) && !$draft_or_pending ) )
			$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 );
}