如何将带有两个参数的重写规则添加到单视图页面?

时间:2020-08-24 作者:ggzone

我在理解add\\u rewrite\\u规则在我的案例中是如何工作的方面遇到了困难。我有一个页面列出了来自外部来源的新闻。所有项目均与“链接”;阅读更多信息;。这些链接如下所示:domain.com/news/single/?id=12345&title=title-of-this-news

一切正常。如果我单击链接;“单个”;页面内容为;id“;param并显示我想要的输出。

为了使其美观,我希望链接如下所示:domain.com/news/12345/title-of-this-news这意味着/单个/不是url的一部分-第一部分是获取其数据所需的ID,最后一部分是标题。

有人能帮我吗?谢谢

EDIT: 由于其中一个答案,我想出了这个来匹配我的URL、参数等,但它不起作用(永久链接被重新保存):

// Register the custom rewrite rule.
function wpse_373628_init() {
    add_rewrite_rule(
        // Matches /news/<id>/<title-slug> in the URL.
        \'^news-events/single/(\\d+)/([^/]+)/?$\',

        // You could also add &news_title=$matches[2], but I think the ID is
        // enough for you to identify the single news being requested.
        \'index.php?pagename=news-events/single&newsID=$matches[1]&newsTitle=$matches[2]\', // query by slug
//      \'index.php?page_id=123&news_id=$matches[1]\',          // or query by ID

        \'top\'
    );
}
add_action( \'init\', \'wpse_373628_init\' );

// And register the custom query arg.
function wpse_373628_query_vars( $vars ) {
    $vars[] = \'newsID\';
    $vars[] = \'newsTitle\'; // if you\'re using news_title in the rewrite rule
    return $vars;
}
add_filter( \'query_vars\', \'wpse_373628_query_vars\' );

1 个回复
SO网友:Sally CJ

如果您还没有这样做,我建议您退房this Codex article 这很好地介绍了如何使用add_rewrite_rule() 在WordPress中重写URL。

现在如果newssingle 是页面(即page 类型)和singlenews 第页,然后在第二个参数中add_rewrite_rule() (即重定向URL),您希望使用pagename=news/single 将加载single

或者,您可以使用page_id=<ID> 改为按其ID查询页面。

请参见WP_Query class 有关pagenamepage_id.

然后,您还需要为单个新闻ID使用自定义查询参数,因为例如,您无法使用$_GET[\'id\']. 然后您应该将自定义参数添加到WordPress从URL读取并将其传递给的公共查询参数中WP_Query.

话虽如此,请尝试以下方法:

// Register the custom rewrite rule.
function wpse_373628_init() {
    add_rewrite_rule(
        // Matches /news/<id>/<title-slug> in the URL.
        \'^news/(\\d+)/([^/]+)/?$\',

        // You could also add &news_title=$matches[2], but I think the ID is
        // enough for you to identify the single news being requested.
        \'index.php?pagename=news/single&news_id=$matches[1]\', // query by slug
//      \'index.php?page_id=123&news_id=$matches[1]\',          // or query by ID

        \'top\'
    );
}
add_action( \'init\', \'wpse_373628_init\' );

// And register the custom query arg.
function wpse_373628_query_vars( $vars ) {
    $vars[] = \'news_id\';
//  $vars[] = \'news_title\'; // if you\'re using news_title in the rewrite rule
    return $vars;
}
add_filter( \'query_vars\', \'wpse_373628_query_vars\' );
只需访问permalink设置页面,即可刷新重写规则(wp-admin »永久链接设置),以便WordPress识别新的重写规则(如上)并将其保存在数据库中。

此外,要检索新闻ID,可以使用get_query_var( \'news_id\' ).

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。