从 WordPress 中的 URL 中提取参数

Posted

技术标签:

【中文标题】从 WordPress 中的 URL 中提取参数【英文标题】:Extracting a parameter from a URL in WordPress 【发布时间】:2012-11-19 02:38:13 【问题描述】:

我正在尝试使用 URL 将参数传递给 WordPress 网站 - 例如:

www.fioriapts.com/?ppc=1 将是 URL。

我打算在 functions.php 文件中编写一个函数,但是如何在 WordPress 中提取参数的机制超出了我的范围。我找到了很多关于如何使用函数add_query_arg() 将参数添加到 URL 的示例,但没有找到关于如何提取参数的任何示例。提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

通过 URL 传递参数时,您可以将值作为 GET 参数检索。

使用这个:

$variable = $_GET['param_name'];

//Or as you have it
$ppc = $_GET['ppc'];

不过,先检查变量更安全:

if (isset($_GET['ppc'])) 
  $ppc = $_GET['ppc'];
 else 
  //Handle the case where there is no parameter

这里有一些关于 GET/POST 参数的文章,你应该看看:http://php.net/manual/en/reserved.variables.get.php

编辑:我看到这个答案在做出几年后仍然有很多流量。 阅读此答案所附的 cmets,尤其是来自@emc 的输入,他详细介绍了安全地实现此目标的 WordPress 功能。

【讨论】:

非常感谢 - 这对我来说是一个无聊的时刻 - 所以它完全按照标准 html/php 完成 - Wordpress 有很多自定义功能,我认为它会有所不同...... 这是否与 WordPress 的 get_query_var 冲突? $_GET 的替代品是$_REQUEST,但出于对安全的热爱,尽可能使用get_query_var。懒惰地解析原始 URL 参数是注入攻击的发生方式! 此方法是解决get_query_var 和静态主页的愚蠢错误/功能的唯一方法:core.trac.wordpress.org/ticket/25143 @emc get_query_var 不适用于自定义查询变量检查 developer.wordpress.org/reference/functions/get_query_var/…【参考方案2】:

你可以试试这个功能

/**
 * Gets the request parameter.
 *
 * @param      string  $key      The query parameter
 * @param      string  $default  The default value to return if not found
 *
 * @return     string  The request parameter.
 */

function get_request_parameter( $key, $default = '' ) 
    // If not request set
    if ( ! isset( $_REQUEST[ $key ] ) || empty( $_REQUEST[ $key ] ) ) 
        return $default;
    

    // Set so process it
    return strip_tags( (string) wp_unslash( $_REQUEST[ $key ] ) );

这是函数中发生的事情

这里发生了三件事。

首先我们检查请求密钥是否存在。如果不是,则只返回一个默认值。 如果已设置,那么我们首先通过执行 wp_unslash 删除斜线。在这里阅读为什么它比 stripslashes_deep 更好。 然后我们通过执行一个简单的 strip_tags 来清理该值。如果您希望参数中包含富文本,请通过 wp_kses 或类似函数运行它。

所有这些信息以及更多关于函数背后的想法的信息都可以在这个链接上找到https://www.intechgrity.com/correct-way-get-url-parameter-values-wordpress/

【讨论】:

【参考方案3】:

为什么不直接使用 WordPress get_query_var() 函数呢? WordPress Code Reference

// Test if the query exists at the URL
if ( get_query_var('ppc') ) 

    // If so echo the value
    echo get_query_var('ppc');


由于 get_query_var 只能访问 WP_Query 可用的查询参数,为了访问像“ppc”这样的自定义查询变量,您还需要在您的插件或functions.php 中注册此查询变量,方法是在初始化期间添加一个操作:

add_action('init','add_get_val');
function add_get_val()  
    global $wp; 
    $wp->add_query_var('ppc'); 

或者通过向 query_vars 过滤器添加一个钩子:

function add_query_vars_filter( $vars )
  $vars[] = "ppc";
  return $vars;

add_filter( 'query_vars', 'add_query_vars_filter' );

【讨论】:

这是正确的方式 - Wordpress 不鼓励访问 $_GET 和 $_POST 但是query_vars如何在init之后运行,然后从URL中提取参数? 附加说明:过滤器必须添加到functions.php文件中。 如果您在第一页的博客以外的任何内容,此方法将破坏主页。 core.trac.wordpress.org/ticket/25143 @Noniq 因为这些函数做了很多清理工作,很容易被忽略。这不一定是在 100% 的情况下使用的方法,但它是默认的方法。 WPCS PHP_CodeSniffer 规则在直接访问数据时会发出警告,如果绝对需要直接访问,开发人员应显式添加忽略注释标志。【参考方案4】:

在回调函数中,使用$request参数

$parameters = $request->get_params();
echo $parameters['ppc'];

【讨论】:

以上是关于从 WordPress 中的 URL 中提取参数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 中的 URL 中提取 GET 参数? [复制]

通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值

通过删除Laravel中的额外字符,从斜杠分隔的URL中提取参数值

将 URL 参数拉入 WordPress“原始 HTML”内容元素

在 MySQL 中,如何从长文本字符串中提取 URL?

如何从javascript中的字符串中提取参数(指定的模式字符串)