Если вы используете какую-либо форму социальных сетей, в частности, 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, вы переопределите их.