get_post_type_archive_link() WP 3.1.0

Повертає URL-адресу (постійне посилання) на сторінку архіву довільного типу запису.

Докладніше про те, які сторінки належать до “post_type_archive” дивіться в описі функції is_post_type_archive()

Якщо функція не працює або повертає false, перевірте, чи ввімкнено аргумент has_archive => trueпід час реєстрації типу посту .

Працює на основі:
get_post_type_object()

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

Повертає

Строку|false. Рядок: посилання (УРЛ) на сторінку архіву зазначеного типу посту. Поверне false, якщо вказаного типу посту немає або якщо для нього не вказано параметр has_archive.

Якщо вказати post, то поверне посилання на головну сторінку сайту або на сторінку, вказану в адмінці як “Сторінка записів”.

Використання

get_post_type_archive_link( $post_type );
$post_type
(рядок) (обов’язковий)
Назва довільного типу посту.

Приклади

1

#1 Посилання на архівну сторінку довільного типу запису

Допустимо, за допомогою register_post_type() ми створили тип запису book. Давайте виведемо посилання на архівну сторінку цього типу (на ній будуть розташовані всі записи цього типу):

<a href="<?php echo get_post_type_archive_link('book'); ?>">Книги</a>

нотатки

  • Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.

список змін

З версії 3.1.0Введено.
З версії 4.5.0Support for posts був added.

Код get_post_type_archive_link() WP 6.0.2

function get_post_type_archive_link( $post_type ) {
	global $wp_rewrite;

	$post_type_obj = get_post_type_object($post_type);
	if (! $post_type_obj) {
		return false;
	}

	if ( 'post' === $post_type ) {
		$ show_on_front = get_option( 'show_on_front' );
		$page_for_posts = get_option( 'page_for_posts');

		if ( 'page' === $show_on_front && $page_for_posts ) {
			$link = get_permalink( $page_for_posts );
		} else {
			$link = get_home_url();
		}
		/** Цей filter is documented в wp-includes/link-template.php */
		return apply_filters( 'post_type_archive_link', $link, $post_type );
	}

	if (! $post_type_obj->has_archive) {
		return false;
	}

	if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) ) {
		$struct = ( true === $post_type_obj->has_archive ) ? $post_type_obj->rewrite['slug'] : $post_type_obj->has_archive;
		if ( $post_type_obj->rewrite['with_front'] ) {
			$struct = $wp_rewrite->front . $struct;
		} else {
			$struct = $wp_rewrite->root. $struct;
		}
		$link = home_url( user_trailingslashit( $struct, 'post_type_archive' ) );
	} else {
		$link = home_url( '?post_type=' . $post_type );
	}

	/**
	 * Filters post type archive permalink.
	 *
	 * @ Since 3.1.0
	 *
	 * @param string $link The post type archive permalink.
	 * @param string $post_type Post type name.
	 */
	return apply_filters( 'post_type_archive_link', $link, $post_type );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *