如何创建筛选器并向所有链接添加查询参数

时间:2020-10-03 作者:lennartoester

我已经试了好几天了,都没法用了

我希望创建一个简单的过滤器,可以在整个网站的每个链接中添加2个参数。我希望我可以控制只有链接有/外部/在其url中受到影响

我希望添加当前页面的id=[id]和referrer=URL

希望得到一些帮助:-)

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

假设你的意思是$post->ID, 您可以使用post_linkpost_type_link 用于附加查询字符串的筛选器。我们正在使用add_query_arg() 执行此操作的函数:

/**
 * Modify the posts navigation WHERE clause
 * to include our acceptable post types
 * 
 * @param String $post_link - Post URL
 * @param WP_Post $post - Current Post
 * 
 * @return String
 */
function wpse375877_link_referrer( $post_link, $post ) {
    
    // Return Early
    if( is_admin() ) {
        return $post_link;
    }
    
    return add_query_arg( array(
        \'id\'        => $post->ID,
        \'referrer\'  => $post_link,
    ) );
    
}
add_filter( \'post_link\',        \'wpse375877_link_referrer\', 20, 2 );
add_filter( \'post_type_link\',   \'wpse375877_link_referrer\', 20, 2 );
以上确保了任何WordPress函数都将获得一个修改后的post URL。现在,如果我们想重定向任何缺少此查询字符串的URL,您可以使用template_redirect 行动挂钩:

/**
 * Redirect any items without query string
 * 
 * @return void
 */
function wpse375877_redirect_to_referrer() {
    
    if( ! isset( $_GET, $_GET[\'id\'], $_GET[\'referrer\'] ) ) {
        
        wp_safe_redirect(
            add_query_arg( array(
                \'id\'        => get_the_ID(),
                \'referrer\'  => get_permalink(),
            ), get_permalink() )
        );
        exit();
        
    }
    
}
add_action( \'template_redirect\', \'wpse375877_redirect_to_referrer\' );
我不能百分之百确定我是否应该使用urlencode() 是否在这些URL上。

相关推荐

有人知道如何将一个完整的jQuery插件插入到WordPress元素页面中吗?

我尝试在一个wp页面中实现一个jquery插件,该页面显示在elementor页面上。这里是the link 到插件。What I have tried so far:1. 我通过插件加载了jquery文件(通过functions.php它不起作用)-&燃气轮机;头部载荷:https://1drv.ms/u/s!AikSNhBAk4tevjHlEeV67BifIivC我不确定路径是否正确,是否有必要在wordpress上使用它2. 我插入了html和css(这是最简单的部分)3. 我插入(+将“$”替换为