get_permalink() — возвращает URL поста

Позволяет получить абсолютный URL записи, страницы или произвольного типа поста в WordPress. Если первый параметр не указан, то возвращает URL текущего поста в цикле WordPress.

get_permalink( $post = 0, $leavename = false )

Параметры

$id
(целое число|объект WP_Post) ID или объект поста, ссылку на который нужно получить, по умолчанию — текущий пост в цикле.
$leavename
(логическое) если true, то ссылка будет возвращаться в виде правила постоянных ссылок, например https://misha.agency/%pagename%

Пример 1. Выводим URL текущего поста в цикле

Если вы планируете использовать функцию внутри цикла, то передавать ID поста в неё не обязательно, но не забудьте использовать PHP-функцию echo() для осуществления вывода.

echo '<a href="' . get_permalink() . '">подробнее</a>';

Пример 2. Ссылка на определённый пост

Другой вариант использования функции – передать в неё ID поста, ссылку на который нам нужно получить, например:

$post_id = 2;
$permalink = get_permalink( $post_id );

Пример 3. Передаём объект поста WP_Post в функцию get_permalink()

В этом примере мы использовали функцию get_page_by_title() для получения объекта поста по его заголовку.

echo get_permalink( get_page_by_title( 'Кодекс WordPress' ) );

Пример 4. Выводим ссылку на страницу «Магазин» в WooCommerce

Страница «Магазин» – это стандартная страница витрины WooCommerce, для получения её ID мы можем воспользоваться функцией wc_get_page_id(), и передать значение ID в функцию get_permalink().

echo get_permalink( wc_get_page_id( 'shop' ) );

Хуки из функции

В функции get_permalink() есть 3 фильтр-хука, рассказываю о них далее.

pre_post_link

Этот фильтр-хук срабатывает практически в самом начале, и позволяет отфильтровать именно структуру постоянных ссылок, получаемых из get_option( 'permalink_structure' ), но только для типа записи post.

add_filter( 'pre_post_link', 'true_change_structure', 25, 3 );
 
function true_change_structure( $permalink, $post, $leavename ) {
 
	// мы можем использовать объект поста, чтобы изменить структуру одного поста например
	if( '531' == $post->ID ) { // если ID поста равен 531
		$permalink = '/%year%/%monthnum%/%postname%/';
	}
	return $permalink;
 
}

Не знаете, куда вставлять код?

post_link_category

Данный фильтр позволяет выбрать определённую категорию, которую вы бы хотели использовать в ссылке, в случае, если %category% задано в структуре постоянных ссылок. По умолчанию будет использована первая рубрика.

Для более полного понимания, вот пример:

add_filter( 'post_link_category', 'true_change_main_category', 25, 3 );
 
function true_change_main_category( $cat, $cats, $post ) {
 
	// по умолчанию $cat == $cats[0], т е первый элемент массива
	// $cat – объект WP_Term, $cats – массив объектов WP_Term, к которым принадлежит пост
	// $post – объект поста WP_Post
 
	// если рубрик больше чем одна и главная рубрика с ID=5, то используем другую
	if( 5 == $cat->term_id && count( $cats ) > 1 ) {
		$cat = $cats[1]; // другой элемент массива
	}
	return $cat;
 
}

Не знаете, куда вставлять код?

post_link

Финальный фильтр, позволяет отфильтровать URL поста, получившийся в результате.

add_filter( 'post_link', 'true_change_post_link', 25, 3 );
 
function true_change_post_link( $permalink, $post, $leavename ) {
 
	// например для постов из категории docs меняем ссылки
	if( in_category( 'docs', $post->ID ) {
		$permalink = site_url( 'docs' ) . '#' . $post->post_name;
	}
	return $permalink;
 
}

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 2

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.