【问题标题】:Add dynamic prefix in WordPress page url在 WordPress 页面 url 中添加动态前缀
【发布时间】:2016-04-07 02:41:44
【问题描述】:

我需要在页面 url 中添加动态前缀。

您可以通过Rewrite_API 帮助我实现这一目标

问题

在我的 WordPress 网站中,我想在 URL 中的页面名称之前使用 prefix 访问一些页面。例如,通常可以使用

访问页面
http://example.com/page-name

我想在页面名称前添加动态前缀(位置)。所以我想访问如下页面

http://example.com/country/state/page-name

到目前为止我尝试了什么:

我尝试使用下面的过滤器在 url 中的页面名称之前添加重写标签。

add_action( 'init', array( $this, 'custom_rewrite_rules' ), 1, 0 ); 
 /*
* Rewrite page urls
* adding prefix to page urls
* @doc: http://stackoverflow.com/questions/17613789/wordpress-rewrite-add-base-prefix-to-pages-only
*/
function custom_rewrite_rules()
{
    global $wp_rewrite;
    // add rewrite tag for location
    $wp_rewrite->add_rewrite_tag( "%region%", '([^/]+)', 'region=' );

    $wp_rewrite->page_structure = $wp_rewrite->root . '%region%/%pagename%';        


}// end func

Above action hook 允许我在前端和后端拥有动态页面 url。 例如,我可以看到页面 url 现在是

http://example.com/%region%/page-name

我需要什么

由于我现在生成了动态 url,我想用我想要的位置字符串替换 url 的 %region% 部分,它可能只是 country 名称或国家/州名称组合。

提前致谢。

【问题讨论】:

  • 您解决了这个问题吗?我正在尝试解决几乎相同的问题。
  • 还没有,我已经尝试过@user5200704 的答案,但我坚持这个问题。我只需要在前端更改 url,后端 url 应该带有 %region% rewrite 标签。它也应该加载相同的页面,不管前缀是什么。目前我尝试的所有解决方案都给了我 404 错误。

标签: wordpress url-rewriting


【解决方案1】:

使用 wordpress 过滤器更改页面链接

add_filter( '_get_page_link', 'custom_region_page_link', 10, 2 );

function custom_region_page_link( $link, $post_id ){
    //$slug = get_post_meta( $post_id, 'key', true );
    $link = str_replace('%region%', 'india', $link);
    return $link;
}

【讨论】:

  • 它也替换了后端的url,它应该在后端保留example.com/%region%/page-name。只有在前端如果想用地区(国家或州)来改变它,我们可以用一个字符串来替换它。我们可能还需要重写规则。
  • 你可以检查条件重写规则非常好。 if( !is_admin() ){ // 在这里替换代码 $link = str_replace('%region%', 'india', $link); }
  • 嗯,好的。我刚刚发现这篇文章可能会有所帮助:stackoverflow.com/questions/16251287/…
  • @user5200704 我可以成功替换字符串,但这给了我 404,因为 WordPress 认为它​​是一个不同的页面。我想加载相同的页面。例如,example.com/india/test-page 应该显示 example.com/test-page 的内容。前缀应该被忽略。为此,我们需要重写规则。我不能让它工作。
  • 我在本地环境中测试它正在工作。我认为需要刷新规则来更新 wordpress 新页面结构。在 $wp_rewrite->flush_rules( false ) 之后的 $wp_rewrite->page_structure; codex.wordpress.org/Rewrite_API/flush_rules
猜你喜欢
  • 2015-10-03
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多