Если вы используете какие-либо социальные медиа и, в частности, Twitter, — вы точно встречали шортлинки (сокращенные ссылки), которые работают как метки, указывающие на конкретную страницу, заменяя ее длинный адрес. На самом деле они используются уже лет десять, но их использование стало на самом деле популярным только с появлением сервисов сокращения ссылок, которые предоставляют статистику кликов, а также с ограничением количества символов в твитах.
Смотрите также:
У WordPress есть свой встроенный "сокращатель", который, по умолчанию, не особо заслуживает такого названия. Это ссылки вида www.yoursite.com?p=1, которые указывают на отдельную запись, и вы можете получить их, нажав на кнопку Получить короткую ссылку в окне редактирования вашей записи.
Для этого есть своя причина: WordPress не хочет использовать никакой сторонний сервис для сокращения ссылок, и за стандартными короткими ссылками www.yoursite.com?p=1 стоит API, которое позволяет вам заменить его более обстоятельно сокращенным адресом от другого сервиса — или даже от вашего собственного.
Но короткие ссылки WordPress есть только для записей — но не для страниц или других типов записей. В этом коротком руководстве я покажу, как изменить это. И подобным образом вы сможете изменить стандартную сокращенную ссылку на ссылку из сервиса сокращения ссылок — тавтология, да.
Если копнуть в исходный код движка WordPress, а точнее нас интересует функция wp_get_shortlink(); из файла wp-includes/link-template.php, то мы увидим следующее:
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 позволит нам обойти стандартную обработку коротких ссылок WordPress. Чтобы сделать это, нашему плагину нужно просто зацепиться за этот фильтр и вернуть что-нибудь, отличное от ‘false’.
/** * 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’ — поскольку другие плагины уже, возможно, изменили $shortlink — и вернув значение false, вы перезапишете их изменения.
Комментарии к записи: 0