Как добавить сокращенные ссылки к произвольным типам записей в WordPress

Если вы пользуетесь социальными сетям, в частности 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, а вернув ложное значение, мы перезапишем их.

Надеемся, что эта статья помогла вам разобраться с тем, как добавлять сокращенные ссылки к произвольным типам записей.

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top