我已经用add_rewrite_endpoint 功能……以下是整个结构:
// Register to query vars
add_filter( \'query_vars\', \'add_query_vars\');
function add_query_vars( $vars ) {
$vars[] = \'account\';
return $vars;
}
// Add rewrite endpoint
add_action( \'init\', \'account_page_endpoint\' );
function account_page_endpoint() {
add_rewrite_endpoint( \'account\', EP_ROOT );
}
// Account template
add_action( \'template_include\', \'account_page_template\' );
function account_page_template( $template ) {
if( get_query_var( \'account\', false ) !== false ) {
return locate_template( array( \'account.php\' ) );
}
return $template;
}
到目前为止,当我输入一个类似url的示例时,这非常有效。com/帐户/用户名。。。但网站中的链接仍然像这样。com?帐户=用户名。
如何从参数版本重定向到重写版本?是否有必要添加额外的重写规则,或者这些链接是否需要运行任何功能?
网站本身上的帐户链接是通过以下功能创建的:
function account_url( $user_id ) {
$user = get_userdata( $user_id );
return add_query_arg( \'account\', strtolower( $user->user_login ), get_home_url() );
}
最合适的回答,由SO网友:Milo 整理而成
重写规则只处理传入的请求,不涉及链接生成。
主要的WordPress重写系统是用PHP内部解析的,您不会看到对.htaccess
添加端点时的文件。基本的。htaccess规则本质上是说“如果这不是对服务器上物理文件或目录的请求,那么将请求移交给WordPress”。
你的account_url
函数在输出帐户URL时必须处理“丑陋”和“美丽”两种情况。我们可以看看内置的get_permalink
function 要了解WordPress如何处理此问题,这里有一个缩写版本:
$permalink = get_option(\'permalink_structure\');
if ( \'\' != $permalink ) {
// output a pretty permalink
} else {
// output an ugly permalink
}
The
permalink_structure
选项保存所选的模式,如果启用了pretty permalinks,我们知道如果它为空,pretty permalinks将被禁用。
SO网友:Friss
编辑2
使用非常永久的链接,例如示例。com/account/joh您需要在管理区域的永久链接设置中激活,然后在服务器上激活它。您在评论中告诉我们您使用了nginx,我更了解apache,所以这里有一个教程可以帮助您。
https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/
EDIT
我走得太快了,忘记了我对add\\u rewrite\\u规则的建议,我认为使用add\\u rewrite\\u端点时,必须使用“template\\u redirect”挂钩,而不是“template\\u include”挂钩。
END EDIT
根据您显示的代码,我会将其添加到您的account\\u page\\u endpoint函数中
add_rewrite_rule(\'^account/([a-z0-9]+)/?\', \'index.php?account=$matches[1]\', \'top\');
它不会修改。htaccess文件,但您可以刷新规则。
修改后,您可能需要刷新规则。
两种可能性:
-要么在上面的代码行之后添加对刷新重写函数的调用,如下所示:
flush_rewrite_rules();
-或者你可以进入你的管理区域,在永久链接设置中重新保存你的当前设置。