如何在固定链接中使用ADD_QUERY_ARG获得漂亮的URL

时间:2013-12-20 作者:user3114592

具有add_query_arg() 向URL添加其他参数很好,创建重写规则也很容易。到目前为止还不错。但问题是wordpress所做的URL替换。

当我有URL时,例如:

www.mysite.com/?page_id=1&myvar=test
我用激活的永久链接将这个URL键入浏览器的地址行。此链接将变为:

www.example.com/pagename/?myvar=test
BUT: 我想得到的是:

www.example.com/pagename/test
最后,我想使用如下代码:

<a href="<?php add_query_arg( \'myvar\', \'test\', get_permalink() ) ?>"> .... </a>
这将导致:

www.example.com/pagename/test
如何做到这一点?我花了几个小时阅读文档,但找不到解决方案。

3 个回复
SO网友:swissspidy

只是面对同样的情况,在谷歌搜索时偶然发现了这个问题。

看来这是不可能的。如果启用了permalinks,Core本身只会将字符串附加到URL,请参见https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

对于对此感兴趣的人:您可以在代码中执行类似操作:

if ( \'\' != get_option(\'permalink_structure\') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . \'test\' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( \'test\', \'\', get_permalink() ); // www.example.com/pagename/?test
  }
Jon Cave在官方make博客上的评论中也推荐了此解决方案:https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

SO网友:Ramos Abdellaziz

WordPress不会让你轻易做到这一点。事实上,重写规则是您在WordPress中实现这类功能的唯一选择,当您的站点增长时,WordPress重写规则会变得非常混乱,因为插件和主题(以及您自己)可能会在(多)站点安装中的现有规则之上添加自定义重写规则。

@如果您已经有了密钥的重写规则(myvar),并且在第一个条件中使用永久链接,然后在没有这些条件的情况下回退到传统的查询字符串,那么swissspidy解决方案将起作用@JohnathanJoosten解决方案展示了在WordPress中重写规则是如何变得非常复杂的(想象一下,对所有查询字符串键和值都这样做…)

之前,我在为我的客户开发一些中型项目时遇到过这个问题,我能够使用一个名为Obfusquer的插件实现类似的功能。据该网站称,它用用户定义的密钥屏蔽了所有WordPress查询字符串,还提供了高级自定义要求的挂钩。

有趣的是,它没有列在WordPress插件库中,我认为您需要订阅(我认为这确实是可以承受的,因为一个许可证即使在多站点安装中也可以工作),但是here is a link 如果您需要在WordPress安装中屏蔽/隐藏查询字符串,请访问它。他们也有文件here.

我现在几乎在我所有的wordpress项目中都使用这个插件,希望它能帮助您的需要。干杯

SO网友:Jonathan Joosten

Wordpress的解决方案是添加重写规则,以生成如下内容:

    add_action( \'init\', \'my_rewrite_add_rewrites\' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( \'calendar/([0-9]{4})/?$\', \'index.php?post_type=events&year=$matches[1]\', \'top\' );
        add_rewrite_rule( \'calendar/([0-9]{4})/page/?([0-9]{1,})/?$\', \'index.php?post_type=events&year=$matches[1]&paged=$matches[2]\', \'top\' );
    }
阅读更多:https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

结束

相关推荐

Dynamic Custom Permalinks

我有一个场景,其目的是创建可以动态更改的自定义永久链接,例如:如果显示国家信息,则URL应为http://example.com/country-information如果显示特定国家的城市信息,则URL应如下所示http://example.com/country/city-information. 我怎样才能做到这一点?