Статьи

Совет: добавьте короткие ссылки на пользовательские типы сообщений

Если вы используете какую-либо форму социальных сетей, в частности, Twitter, то вы почти наверняка встретите «короткие ссылки» — укороченные URL-адреса, которые действуют как ярлык, указывающий на конкретную страницу, но маскирующий ее более длинный URL-адрес. Они существуют уже более десяти лет, но их использование действительно получило популярность благодаря сервисам сокращения URL-адресов, которые предоставляли статистику переходов по ссылкам и ограничения по количеству твитов.

WordPress имеет собственную встроенную «шортлинк», которая, по умолчанию, вероятно, не очень заслуживает названия. Это ссылки www.yoursite.com?p=1 которые указывают на один пост, и вы можете получить их с помощью кнопки «Получить короткую ссылку» на экране редактирования вашего поста.

Для этого есть веская причина: WordPress не хотел навязывать какой-либо конкретный сторонний сервис для сокращения URL, а под стандартными короткими ссылками www.yoursite.com?p=1 находится API, который позволяет заменить его более существенно сокращенный URL из другого сервиса — или, возможно, даже вашего собственного .

Но короткие ссылки WordPress появляются только на постах, а не на страницах или постах любого другого типа. В этом кратком совете я покажу вам, как это исправить. (И аналогичным образом вы можете полностью изменить стандартную короткую ссылку на одну из службы сокращения URL).

wp_get_shortlink() исходный код и wp_get_shortlink() функцию wp_get_shortlink() (см. Кодекс ), мы находим следующее:

1
2
3
4
5
6
7
8
function wp_get_shortlink($id = 0, $context = ‘post’, $allow_slugs = true) {
 
    // Allow plugins to short-circuit this function.
    $shortlink = apply_filters(‘pre_get_shortlink’, false, $id, $context, $allow_slugs);
    if ( false !== $shortlink )
        return $shortlink;
 
        …

Таким образом, перехват pre_get_shortlink позволяет обойти обработку коротких pre_get_shortlink WordPress по умолчанию. Для этого нашему плагину нужно только подключить этот фильтр и вернуть что-либо, кроме «false».

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * A function which adds a shortlinks button for ‘portfolio’ post type
 */
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;
 
    }
 
    // Only do something if of portfolio post type
    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’ — поскольку другой плагин Возможно, ins уже изменил $shortlink и, вернув false, вы переопределите их.