如何将查询参数添加到所有内部链接?

时间:2017-03-18 作者:Fadi

我正在尝试向WordPress博客中的所有内部链接添加url查询参数。例如,客户端通过以下链接登录到博客:

www.example.com/?p1=test&p2=test
我希望博客内的链接(例如,一篇文章的链接)仍然具有查询字符串:

www.example.com/post1/?p1=test&p2=test
有没有办法做到这一点?

3 个回复
最合适的回答,由SO网友:Paul \'Sparrow Hawk\' Biron 整理而成

以下是not 一个完整的解决方案(如@cjbj所述,它不会处理帖子内容中的链接),但它可以为任何URL(在WP核心、主题或插件中)通过get_permalink() (包括wp_page_menu(), 和亲属)。

$filters = array (
    \'post_link\',       // when post_type == \'post\'
    \'page_link\',       // when post_type == \'page\'
    \'attachment_link\', // when post_type == \'attachment\'
    \'post_type_link\',  // when post_type is not one of the above
    ) ;
foreach ($filters as $filter) {
    add_filter ($filter, \'wpse_add_current_requests_query_args\', 10, 3) ;
    }

function
wpse_add_current_requests_query_args ($permalink, $post, $leavename)
{
    if (!is_admin ()) {
        // we only want to modify the permalink URL on the front-end
        return ;
        }

    // for the purposes of this answer, we ignore the $post & $leavename
    // params, but they are there in case you want to do conditional
    // processing based on their value
    return (esc_url (add_query_arg ($_GET, $permalink))) ;
}
返回结果之前的解释,get_permalink() 应用4个过滤器中的一个(在$filters 上面的数组)。因此,我们连接到每个过滤器。

我们钩住这些过滤器调用的函数add_query_arg() 要添加当前请求中存在的任何查询参数(即。,$_GET).

重要的安全注意事项,如中所述add_query_arg():

重要提示:默认情况下,add\\u query\\u arg()的返回值不会转义。应使用esc\\u url()或类似工具对输出进行后期转义,以帮助防止跨站点脚本(XSS)攻击的漏洞。

在中调用esc\\u url()wpse_add_current_requests_query_args() 并不是在所有情况下我都会称之为“迟来的逃跑”。但不幸的是,许多WP核心功能(例如。Walker_Page::start_el(), 最终由wp_page_menu()), 不要打电话esc_url() 关于返回值get_permalink(), 因此,为了安全起见,我们必须在过滤器挂钩中调用它。

SO网友:cjbj

可以使用全局变量访问查询字符串$_SERVER, 具有$_SERVER[\'QUERY_STRING\']. 下一步是将其附加到博客中的所有内部链接。这稍微有点困难,因为链接可能隐藏在任何地方。

隐藏在帖子内容中的链接可以通过the_content 滤器Here 是仅在内部链接上使用该过滤器的略有不同的示例。

主题和插件中的永久链接应通过post_link 过滤器,您也可以使用它来附加字符串。

SO网友:AppError

那么您想“保留”变量值?也许你最好做个饼干?这可能会使事情变得更加简单和干净。看看这篇文章,它似乎具备了设置cookie所需的一切:https://premium.wpmudev.org/blog/set-get-delete-cookies/ 您应该能够使用get\\u query\\u var从URL获取变量:https://codex.wordpress.org/Function_Reference/get_query_var

相关推荐

Permalinks - Archives

WordPress文档说:WordPress offers you the ability to create a custom URL structure for your permalinks and archives. https://codex.wordpress.org/Settings_Permalinks_Screen 我看到此屏幕将如何为特定帖子/页面创建永久链接,但我没有看到此设置屏幕上关于如何为存档帖子/页面创建链接的任何其他详细信息。有人能澄清一下吗?