Функция get_permalink()
в WordPress используется для получения постоянного URL-адреса (перманентной ссылки) для поста или страницы. Это базовая функция для работы с URL-адресами постов, которая позволяет динамически получать ссылки для использования в темах и плагинах.
Описание функции
Функция get_permalink()
возвращает полный URL-адрес для указанного поста или страницы. Если ID поста не указан, функция возвращает URL для текущего поста в цикле WordPress.
get_permalink( $post = 0, $leavename = false )
Параметры
- $post (int|WP_Post): (Необязательный) ID поста или объект поста. По умолчанию — текущий пост в цикле.
- $leavename (bool): (Необязательный) Нужно ли сохранять имя поста в ссылке. По умолчанию —
false
. Если установить вtrue
, то ссылка будет содержать имя поста, а не только его URL.
Возвращаемое значение
- (string|false): Полный URL-адрес на успехе или
false
в случае неудачи.
Примеры использования
Пример 1. Получение URL-адреса текущего поста
Этот пример показывает, как получить и вывести URL-адрес текущего поста в цикле WordPress.
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
$permalink = get_permalink();
echo '<a href="' . esc_url( $permalink ) . '">' . get_the_title() . '</a>';
}
}
Пример 2. Получение URL-адреса определенного поста по ID
В этом примере мы получаем URL-адрес для поста с определенным ID.
$post_id = 42; // ID вашего поста
$permalink = get_permalink( $post_id );
echo '<a href="' . esc_url( $permalink ) . '">Ссылка на пост с ID 42</a>';
Пример 3. Использование объекта поста WP_Post в функции get_permalink()
В этом примере мы используем функцию get_page_by_title()
для получения объекта поста по его заголовку.
echo get_permalink( get_page_by_title( 'Кодекс WordPress' ) );
Пример 4. Получение URL-адреса страницы «Магазин» в WooCommerce
Страница «Магазин» является стандартной страницей витрины WooCommerce. Для получения её ID можно воспользоваться функцией wc_get_page_id()
и передать значение ID в функцию get_permalink()
.
echo get_permalink( wc_get_page_id( 'shop' ) );
Фильтры в функции
В функции get_permalink()
предусмотрены три фильтр-хука, которые можно использовать для изменения выходного значения.
pre_post_link
Этот фильтр позволяет изменять структуру постоянных ссылок, получаемых из опции get_option( 'permalink_structure' )
, для постов типа post
.
add_filter( 'pre_post_link', 'custom_change_structure', 25, 3 );
function custom_change_structure( $permalink, $post, $leavename ) {
// Изменяем структуру ссылки для поста с ID 531
if ( '531' == $post->ID ) {
$permalink = '/%year%/%monthnum%/%postname%/';
}
return $permalink;
}
post_link_category
Этот фильтр позволяет выбрать определённую категорию, которую вы бы хотели использовать в ссылке, если в структуре постоянных ссылок задан параметр %category%
. По умолчанию будет использована первая рубрика.
add_filter( 'post_link_category', 'custom_change_main_category', 25, 3 );
function custom_change_main_category( $cat, $cats, $post ) {
// Если рубрик больше одной и главная рубрика с ID 5, используем другую
if ( 5 == $cat->term_id && count( $cats ) > 1 ) {
$cat = $cats[1];
}
return $cat;
}
post_link
Этот фильтр позволяет изменять URL поста, получившийся в результате выполнения функции.
add_filter( 'post_link', 'custom_change_post_link', 25, 3 );
function custom_change_post_link( $permalink, $post, $leavename ) {
// Изменяем ссылки для постов из категории 'docs'
if ( in_category( 'docs', $post->ID ) ) {
$permalink = site_url( 'docs' ) . '#' . $post->post_name;
}
return $permalink;
}
Заключение
Функция get_permalink()
является мощным инструментом для получения постоянных URL-адресов постов и страниц в WordPress. Она позволяет легко динамически получать ссылки и использовать их в темах и плагинах. Используя фильтры, вы можете настроить структуру и содержимое ссылок в соответствии с вашими потребностями.