为重写终结点添加重写规则

时间:2018-03-29 作者:GDY

我已经用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() );

}

2 个回复
最合适的回答,由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
}
Thepermalink_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();
-或者你可以进入你的管理区域,在永久链接设置中重新保存你的当前设置。

结束

相关推荐

WordPress Custom URLs

根据maioman发布的链接,我对以下问题进行了修改:我很难使用自定义的帖子类型/分类法。我想要一个自定义的帖子类型的剧集,并且自定义帖子类型的分类是包含用户生成的术语的剧集。我能够剧集/自定义术语名称/工作。如果你转到这里,它会显示与此术语相关的所有帖子。然而,如果你在剧集/自定义术语名称/帖子标题上看到一篇帖子,我会看到404页。function episodes() { $labels = array( \'name\' => _