如何在永久链接中使用add_query_arg获取漂亮的URL


8

通过add_query_arg()它可以很好地向URL添加其他参数,并且轻松创建重写规则。到目前为止,一切都很好。但是问题是由wordpress完成的URL替换。

当我有一个网址时,例如:

www.mysite.com/?page_id=1&myvar=test

并使用激活的永久链接将此URL键入浏览器的地址栏中。该链接将变为:

www.example.com/pagename/?myvar=test

但是:我想得到的是:

www.example.com/pagename/test

最后,我想使用如下代码:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

这将导致:

www.example.com/pagename/test

如何做到这一点?我已经花了几个小时阅读文档,却找不到解决方案。


1
我想知道这是怎么做的。+1问题。
henrywright

Answers:


5

刚遇到同样的情况,在谷歌搜索时偶然发现了这个问题。

看来这是不可能的。如果启用了漂亮的永久链接,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 Blog的评论中也推荐了此解决方案:https : //make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686


0

WordPress不会让您轻松做到这一点。实际上,重写规则是在WordPress中实现此类操作的唯一选择,并且随着站点的增长,WordPress重写规则可能会变得非常混乱,因为插件和主题(您也可能)会在(多个)现有规则之上添加自定义重写规则。 )现场安装。

如果您已经有密钥(myvar)的重写规则,并且在第一个条件下使用永久链接,然后在没有这些条件的情况下回退到传统查询字符串,则@swissspidy解决方案将起作用。@Johnathan Joosten解决方案显示了WordPress中的重写规则如何变得非常非常复杂(可以对所有查询字符串键和值执行此操作...)

在为客户处理一些中型项目时,我遇到了几次这个问题,并且使用名为Obfusquer的插件可以实现类似的目的。据该网站称,它用用户定义的秘密密钥掩盖了所有WordPress查询字符串,还提供了满足高级自定义要求的钩子。

有趣的是,它未在WordPress插件存储库中列出,并且我认为您需要订阅(我认为这确实是可以承受的,因为即使在多站点安装中也可以使用1个单个许可证),但是如果您需要屏蔽此链接,请访问以下链接 / hide WordPress安装中的查询字符串。他们在这里也有文档。

现在,我几乎在所有的wordpress项目中都使用了该插件,希望它能满足您的需求。干杯。


-1

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


1
您应该简化投票的难度……
Vishal Kumar Sahu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.