get_permalink() WP 1.0.0

Отримує постійне посилання на запис для подальшого використання в php.

Може бути використана за межами Цикл WordPress , для цього потрібно вказувати перший параметр – ID посту, посилання на який потрібно отримати.

Отримує URL для будь –

Примітка: Якщо не вказати параметр ID і використовувати цю функцію за межами Цикл WordPress на сторінках архівів (категорії, архів за датою, архів за авторами тощо), функція поверне посилання на останню статтю, що виводиться в Циклі поточної сторінки, а не посилання на поточну сторінку.

Примітка: Не виводить посилання на екран, а повертає його до змінної.

Працює на основі:
get_post_permalink() ,
get_attachment_link() ,
get_page_link()
Основа
_ _
_ _
_ _
_ _
_ _
_ _
_
1 раз – 0.0034161 сек
(дуже повільно) | 50000 разів – 1.63 сек
(швидко) |
PHP 7.4.8, WP 5.6.2

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

Повертає

Строку|false. URL або false, якщо URL не вдалося отримати.

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

$url = get_permalink( $post, $leavename );
$post
(число/об’єкт)
ID або об’єкт запису (поста), посилання на який потрібно отримати.


Типово: 0 (ID поточного поста)
$leavename
(логічний)
Не замінювати ім’я посту на засланні, тобто. не замінювати тег
%postname% на ім’я посту.


Типово: false

Приклади

1

#1 Отримаємо посилання на поточний запис

Отримати посилання на пост (всередині Цикл WordPress). Оскільки функція не виводить дані, потрібно використовувати php команду echo :

Постійне посилання на пост:<br />
<?php echo get_permalink(); ?>
0

#2 Отримуємо посилання на певні пости

Виведемо список, у якому отримаємо посилання сторінки з ID 1 і 10.

Інформація про блог:
<ul>
	<li><a href="<?php echo get_permalink(1); ?>">Про блог</a></li>
	<li><a href="<?php echo get_permalink(10); ?>">Про автора</a></li>
</ul>
0

#3 Використання з другим параметром

Залишаємо тег %postname% незмінним, наприклад у нас у ЧПУ стоїть структура %post_id%/%postname% , тоді функція спрацює так:

<?php echo get_permalink(185, true); ?>

// виведе: http://example.com/185/%postname%

список змін

З версії 1.0.0Введено.

Код get_permalink() WP 6.0.2

function get_permalink( $post = 0, $leavename = false ) {
	$rewritecode = array(
		'%year%',
		'%monthnum%',
		'%day%',
		'%hour%',
		'%minute%',
		'%second%',
		$leavename ? '' : '%postname%',
		'%post_id%',
		'%category%',
		'%author%',
		$leavename ? '' : '%pagename%',
	);

	if ( is_object( $post ) && isset( $post->filter ) && 'sample' === $post->filter ) {
		$ sample = true;
	} else {
		$post = get_post($post);
		$sample = false;
	}

	if ( empty( $post->ID ) ) {
		return false;
	}

	if ( 'page' === $post->post_type ) {
		return get_page_link($post, $leavename, $sample);
	} elseif ( 'attachment' === $post->post_type ) {
		return get_attachment_link($post, $leavename);
	} elseif ( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ), true ) ) {
		return get_post_permalink( $post, $leavename, $sample );
	}

	$permalink = get_option( 'permalink_structure');

	/**
	 * Filters permalink structure for post для того, щоб token replacement occurs.
	 *
	 * Тільки applies to posts with post_type of 'post'.
	 *
	 * @ Since 3.0.0
	 *
	 * @param string $permalink The site's permalink structure.
	 * @param WP_Post $post The post in question.
	 * @param bool $leavename Whether to keep the post name.
	 */
	$permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename);

	if (
		$permalink &&
		! wp_force_plain_post_permalink( $post )
	) {

		$category = '';
		if ( strpos( $permalink, '%category%' ) !== false ) {
			$cats = get_the_category( $post->ID );
			if ($ cats) {
				$cats = wp_list_sort(
					$cats,
					array(
						'term_id' => 'ASC',
					)
				);

				/**
				 * Filters the category that gets used in the %category% permalink token.
				 *
				 * @ Since 3.5.0
				 *
				 * @param WP_Term $cat Категорія для використання в програмі.
				 * @param array $cats Порядок всіх категорій (WP_Term objects) поєднаний з повідомленням.
				 * @param WP_Post $post The post in question.
				 */
				$category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post);

				$category_object = get_term( $category_object, 'category');
				$category = $category_object->slug;
				if ( $category_object->parent ) {
					$category = get_category_parents( $category_object->parent, false, '/', true ) . $category;
				}
			}
			// Show default category in permalinks,
			// без того, щоб відобразити його explicitly.
			if ( empty( $category ) ) {
				$default_category = get_term( get_option( 'default_category' ), 'category' );
				if ( $default_category && ! is_wp_error( $default_category ) ) {
					$category = $default_category->slug;
				}
			}
		}

		$author = '';
		if ( strpos( $permalink, '%author%' ) !== false ) {
			$authordata = get_userdata( $post->post_author );
			$author = $authordata->user_nicename;
		}

		// Це не є API Call, тому що Permalink є основою на stored post_date value,
		/ / які повинні бути захищені як місцевий час невтішний з більшою PHP timezone.
		$date = explode( ' ', str_replace( array( '-', ':' ), ' ', $post->post_date ) );

		$rewritereplace = array(
			$date[0],
			$date[1],
			$date[2],
			$date[3],
			$date[4],
			$date[5],
			$post->post_name,
			$post->ID,
			$category,
			$author,
			$post->post_name,
		);

		$permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
		$permalink = user_trailingslashit( $permalink, 'single');

	} else { // If they're not using the fancy permalink option.
		$permalink = home_url( '?p=' . $post->ID );
	}

	/**
	 * Filters permalink for a post.
	 *
	 * Тільки applies to posts with post_type of 'post'.
	 *
	 * @ Since 1.5.0
	 *
	 * @param string $permalink The post's permalink.
	 * @param WP_Post $post The post in question.
	 * @param bool $leavename Whether to keep the post name.
	 */
	return apply_filters( 'post_link', $permalink, $post, $leavename);
}

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

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