Если вы пользуетесь социальными сетям, в частности 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, а вернув ложное значение, мы перезапишем их.
Надеемся, что эта статья помогла вам разобраться с тем, как добавлять сокращенные ссылки к произвольным типам записей.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.