好的,正如我在给你们的评论中提到的:修改核心文件不是一个好主意。但这里有一个插件解决方案。
首先,我们要创建自己的重写规则s/123
(用post ID替换123)到index.php?short=123
. 我们还必须过滤WordPress查询变量,以便以后使用它们。
<?php
add_action( \'init\', \'wpse26869_add_rewrites\' );
function wpse26869_add_rewrites()
{
add_rewrite_rule( \'^s/(\\d+)$\', \'index.php?short=$matches[1]\', \'top\' );
}
add_filter( \'query_vars\', \'wpse26869_query_vars\', 10, 1 );
function wpse26869_query_vars( $vars )
{
$vars[] = \'short\';
return $vars;
}
The
add_rewrite_rule
通话内容为“重新连接s,后跟斜杠和一个或多个数字串,以
index.php?short=the_string_of_digits
.
然后,我们可以挂接到模板重定向中,看看我们的查询变量是否存在。如果是,我们将尝试从中获取永久链接。如果失败,我们将抛出404错误。否则,我们将使用“wp\\u redirect”将人员发送到实际的帖子。
<?php
add_action( \'template_redirect\', \'wpse26869_shortlink_redirect\' );
function wpse26869_shortlink_redirect()
{
// bail if this isn\'t a short link
if( ! get_query_var( \'short\' ) ) return;
global $wp_query;
$id = absint( get_query_var( \'short\' ) );
if( ! $id )
{
$wp_query->is_404 = true;
return;
}
$link = get_permalink( $id );
if( ! $link )
{
$wp_query->is_404 = true;
return;
}
wp_redirect( esc_url( $link ), 301 );
exit();
}
最后,我们加入
get_shortlink
要更改我们的rel=“shortlink”在
<head>
现场部分和其他地方。这个新的短链接结构将反映我们上面写的重写规则。
<?php
add_filter( \'get_shortlink\', \'wpse26869_get_shortlink\', 10, 3 );
function wpse26869_get_shortlink( $link, $id, $context )
{
if( \'query\' == $context && is_single() )
{
$id = get_queried_object_id();
}
return home_url( \'s/\' . $id );
}
作为插件:
https://gist.github.com/1179555