Если вы пользуетесь социальными сетям, в частности Twitter, то наверняка сталкивались с «короткими ссылками» — укороченные URL, которые срабатывают как метки, указывая на определенную страницу, но при этом укорачивая ее ссылку. Короткие ссылки существуют уже много лет, однако их распространение началось именно с социальными сетями, когда короткие ссылки стали предоставлять статистику кликов и помогли уменьшить количество символов для твитов.
В WordPress есть собственные встроенные короткие ссылки, которые, по-умолчанию, не заслуживают своего названия. Это ссылки типа www.yoursite.com?p=1, которые ссылаются на отдельную запись, их можно получить, нажав на кнопку «Получить ссылку» в редакторе записей.
И для этого есть причина: WordPress не хочет навязывать ни один из сторонних сервисов для сокращения ссылок, и при этом позволяет заменить стандартные ссылки www.yoursite.com?p=1 с помощью API на использование сторонних сервисов, или даже возможно вашего собственного.
Однако короткие ссылки WordPress появляются только у записей, у страниц же и у произвольных типов записей их нет. В сегодняшней статье мы покажем вам как исправить это. (Таким же образом вы сможете изменить дефолнтую сокращалку ссылок на использование стороннего сервиса сокращения URL).
Берем открытый исходный код, находим функцию wp_get_shortlink() (смотрим Codex) и получаем следующее:
function wp_get_shortlink($id = 0, $context = 'post', $allow_slugs = true) {
// Разрешаем плагинам использовать эту функцию
$shortlink = apply_filters('pre_get_shortlink', false, $id, $context, $allow_slugs);
if ( false !== $shortlink )
return $shortlink;
...
Используем хук pre_get_shortlink, и таким образом разрешаем себе обойти стандартную обработку WordPress коротких ссылок. Для этого нам нужно только перехватит этот фильтр и вернуть что-либо кроме ‘false’.
/**
* Функция, которая добавляет кнопку для сокращенных ссылок для типа записи 'portfolio'
*/
function wptuts_shortlinks_for_portfolio( $shortlink, $id, $context ) {
// Context can be post/blog/meta ID or query
$post_id = 0;
if ( 'query' == $context && is_singular( 'portfolio' ) ) {
// If context is query use current queried object for ID
$post_id = get_queried_object_id();
}
elseif ( 'post' == $context ) {
// If context is post use the passed $id
$post_id = $id;
}
// Выполняем, только если тип записи - portfolio
if ( 'portfolio' == get_post_type( $post_id ) ) {
$shortlink = home_url( '?p=' . $post_id );
}
return $shortlink;
}
add_filter( 'pre_get_shortlink', 'wptuts_shortlinks_for_portfolio', 10, 3 );
Обратите внимание, что вам не нужно изменять короткие ссылки, важно возвращать $shortlink (отфильтрованное значение, которое мы получили с помощью хука), и не ‘false’, потому как плагины уже могли изменить $shortlink, а вернув ложное значение, мы перезапишем их.
Надеемся, что эта статья помогла вам разобраться с тем, как добавлять сокращенные ссылки к произвольным типам записей.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
