Позволяет получить абсолютный 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; }