WordPress как на ладони
wordpress jino

wp_get_shortlink() WP 3.0.0

Возвращает короткую ссылку на статью (пост).

Эта функция существует, чтобы создавать короткую, неизменную ссылку в шаблонах и плагинах, использовать которую можно будет вне зависимости от установленного типа ЧПУ.

Этот тег шаблона предназначен для получения короткой ссылки на пост/блог, когда на блоге включено ЧПУ (Человеко-понятные УРЛ). Такую короткую ссылку удобно использовать для размещения заметок в социальных сетях (twitter).

Такие, короткие, внешние ссылки никак отрицательно не сказывается на поисковой оптимизации (SEO), потому что при переходе по такой ссылке, поискового робота перекидывает на нормальный УРЛ с использованием 301 редиректа (указание что страница перемещена), в результате чего весь вес передается оригинальной странице.

Используется в: the_shortlink().
Хуки из функции:
Возвращает

Строку. Короткую ссылку или пустую строку, если короткой ссылки не существует на запрашиваемый ресурс, или если ссылка не доступна.

Использование

echo wp_get_shortlink($id, $context, $allow_slugs);
$id(число)
ID поста или блога. По умолчанию 0, значит что используется текущий блог или пост.
По умолчанию: 0 (текущий пост)
$context(строка)

Пояснение какой ID указан в параметре $id:

  • post - ID поста;
  • blog - ID блога;
  • media - медиа-файла;
  • query- будет выведена короткая ссылка текущего запроса (параметры $id и $context будут получены из текущего запроса).Если указано post (по умолчанию), то тип поста будет установлен автоматически.

По умолчанию: 'post'

$allow_slugs(логический)
Допускать ли использование слагов (альтернативных названий) в ссылках. Этот параметр предназначен для хуков и плагинов.
По умолчанию: true

Примеры

#1. Базовый пример

Выведем короткую ссылку на текущую статью:

echo 'Короткая ссылка: '. wp_get_shortlink();

// получим
// Короткая ссылка: http://example.com/?p=1234

#2 Удалим короткую ссылку из заголовков

Этот пример показывает, как удалить короткую ссылку из HEAD части документа и из заголовков ответа сервера, где также добавляется короткая ссылка:

remove_action('wp_head', 'wp_shortlink_wp_head');
remove_action('template_redirect', 'wp_shortlink_header', 11);

Код wp get shortlink: wp-includes/link-template.php WP 4.8.2

<?php
function wp_get_shortlink( $id = 0, $context = 'post', $allow_slugs = true ) {
	/**
	 * Filters whether to preempt generating a shortlink for the given post.
	 *
	 * Passing a truthy value to the filter will effectively short-circuit the
	 * shortlink-generation process, returning that value instead.
	 *
	 * @since 3.0.0
	 *
	 * @param bool|string $return      Short-circuit return value. Either false or a URL string.
	 * @param int         $id          Post ID, or 0 for the current post.
	 * @param string      $context     The context for the link. One of 'post' or 'query',
	 * @param bool        $allow_slugs Whether to allow post slugs in the shortlink.
	 */
	$shortlink = apply_filters( 'pre_get_shortlink', false, $id, $context, $allow_slugs );

	if ( false !== $shortlink ) {
		return $shortlink;
	}

	$post_id = 0;
	if ( 'query' == $context && is_singular() ) {
		$post_id = get_queried_object_id();
		$post = get_post( $post_id );
	} elseif ( 'post' == $context ) {
		$post = get_post( $id );
		if ( ! empty( $post->ID ) )
			$post_id = $post->ID;
	}

	$shortlink = '';

	// Return p= link for all public post types.
	if ( ! empty( $post_id ) ) {
		$post_type = get_post_type_object( $post->post_type );

		if ( 'page' === $post->post_type && $post->ID == get_option( 'page_on_front' ) && 'page' == get_option( 'show_on_front' ) ) {
			$shortlink = home_url( '/' );
		} elseif ( $post_type->public ) {
			$shortlink = home_url( '?p=' . $post_id );
		}
	}

	/**
	 * Filters the shortlink for a post.
	 *
	 * @since 3.0.0
	 *
	 * @param string $shortlink   Shortlink URL.
	 * @param int    $id          Post ID, or 0 for the current post.
	 * @param string $context     The context for the link. One of 'post' or 'query',
	 * @param bool   $allow_slugs Whether to allow post slugs in the shortlink. Not used by default.
	 */
	return apply_filters( 'get_shortlink', $shortlink, $id, $context, $allow_slugs );
}

Cвязанные функции

Из метки: permalink (постоянные ссылки ЧПУ)

Еще из раздела: Остальное

wp_get_shortlink 4 комментария
  • Владимир cайт: tech-repair.ru @

    Решил написать карту сайта, как простой "выводник" всех постов в виде: название, как кликабельная ссылка с полным путём, затем короткая ссылка сама себе анкор.

    <?php
    /*
    Template Name: Sitemap-shortlinks
    */
    ?>
    <h3>Карта сайта </h3>
    <?php query_posts('showposts=500'); ?>
    <ul>
     <?php while (have_posts()) : the_post(); ?>
       <li>
    	   <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
       </li>
       <li>
    	   <a href="<?php echo wp_get_shortlink(the_post()); ?>"><?php echo the_title(wp_get_shortlink(the_post())); ?></a>
       </li>
    <?php endwhile;?>
    </ul>

    Получаю: короткие ссылки вставляются на разных шагах цикла, т.е. текст короткой ссылки один, сама ссылка другая, а статья, куда она должна вести, третья. Что не так?

    Ответить5.3 лет назад #
  • Станислав

    Доброго времени суток. Подскажите пожалуйста, как можно убрать из короткой ссылки протокол? (-http) Спасибо.

    Ответить1.1 года назад #
    • Станислав

      Решил свой вопрос правкой файла движка. Другого аналога пока что не нашёл.
      Возможно кому то тоже понадобиться.
      $shortlink = preg_replace("(^https?://)", "", $shortlink);

      Ответить1.1 года назад #
      • Kama4486

        Так ведь фильтр же есть, зачем файл движка трогать?

        Вот такой код в тему или плагин:

        add_filter('get_shortlink', function($url){
        	return preg_replace('~^https?://~', '', $url );
        });
        Ответить1.1 года назад #

Здравствуйте, !

Ваш комментарий