目前,我的短链接结构如下所示:
实例com/?p=451
我希望它看起来更像这样:
实例通信/abc123
你知道我如何修改代码来做到这一点吗?
目前,我的短链接结构如下所示:
实例com/?p=451
我希望它看起来更像这样:
实例通信/abc123
你知道我如何修改代码来做到这一点吗?
好的,正如我在给你们的评论中提到的:修改核心文件不是一个好主意。但这里有一个插件解决方案。
首先,我们要创建自己的重写规则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;
}
Theadd_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除了@ChristopherDavis的答案之外,您还可以使用独立于PHP的方式来完成它。htaccess。只需添加此规则:
RewriteEngine On
RewriteRule ^s/(\\d+)$ index.php?p=$1 [L]
替代品,无mod_rewrite
, 使用mod_alias
:RedirectMatch Permanent ^/s/(\\d+)$ /?p=$1
唯一的问题是,这里会发生两个重定向(而不是1个)-(例如)如果用户访问http://example.com/s/121/
他被web服务器重定向到http://example.com/index.php?p=121/
然后通过WordPress访问帖子的实际永久链接。优点是,这永远不会中断!插件可能会损坏,但这不会。
PS: I use this (短链接结构为http://example.com/-121
其中121为岗位ID):
RewriteEngine On
RewriteRule ^-(\\d+)$ index.php?p=$1 [L]
使用Redirection 插件,您可以添加一个重定向来实现这一点,而无需接触PHP或。htaccess。
prerequisites
<安装并设置重定向插件add redirect
<转到工具>重定向单击add new 按钮redirect parameters
<源url:^/s/(\\d+)$url选项(位于最右侧):choose regex /index.php?p=$1this method has the following advantages
<没有PHP编码,没有。htaccess编辑访问跟踪-您可以从仪表板上看到有多少人正在点击短链接重定向-404日志记录-有助于在您弄乱正则表达式灵活性的情况下进行故障排除-如果您愿意,您可以基于帖子类型或来源(例如电子邮件、打印、媒体和youtube)创建多个短链接重定向,以进行跟踪。您可以选择不区分大小写的规则,如果您希望人们手动输入此URL,这将特别有用notes
感谢@its\\u我的帮助。htaccess方法,因为它为我提供了所需的确切正则表达式im使用paginate_links function 要在我的自定义post类型归档文件上创建分页,无论我做什么,在查看第2页时,我都会遇到404个错误(即单击分页跟踪中的一页)。我已经检查和研究过了,似乎没有取得任何进展。这是archive-my\\u CUSTOM\\u POST\\u类型中循环前的my查询。php:<?php global $wp_query; $args = array_merge( $wp_query->query, array(