get_post_permalink() WP 3.0.0
Получает постоянную ссылку (УРЛ) на запись произвольного типа.
Функция является основой для функции get_permalink(), когда нужно получить постоянную ссылку на произвольный тип записи.
Вместо этой функции, лучше использовать get_permalink().
1 раз — 0.000578 сек (медленно) | 50000 раз — 5 сек (быстро)
Возвращает
Строку/WP_Error. УРЛ на запись.
Использование
get_post_permalink( $id, $leavename, $sample );
- $id(число)
- ID поста, ссылку на который нужно получить.
По умолчанию: ID текущего поста, который находится в цикле WordPress в данный момент
- $leavename(логический)
- Оставлять ли имя поста. true - не заменять плейсхолдер
%post_type%
на имя поста.
По умолчанию: false
- $sample(логический)
- true — это образец (пример) ссылки. На вывод не влияет, но передается в хук post_type_link.
По умолчанию: false
Примеры
#1 Демонстрация работы
Выведем ссылки на разные типы записей и с разными параметрами.
// встроенный тип записи post
echo get_post_permalink( 1 ); // https://wp-kama.ru/?post_type=post&p=1
// УРЛ на произвольный тип записи
echo get_post_permalink( 225 ); // http://wp-kama.ru/function/get_permalink
echo get_post_permalink( 225, true ); // http://wp-kama.ru/function/%func%
Заметки
- Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.
Список изменений
Код get_post_permalink() get post permalink
WP 5.6.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( $post ) && in_array( get_post_status( $post ), array( 'draft', 'pending', 'auto-draft', 'future' ), true );
$post_type = get_post_type_object( $post->post_type );
if ( $post_type->hierarchical ) {
$slug = get_page_uri( $post );
}
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 );
}
Cвязанные функции