【问题标题】:How do query post data in WordPress with parameters that have been entered by a user?如何使用用户输入的参数在 WordPress 中查询帖子数据?
【发布时间】:2022-01-28 02:17:57
【问题描述】:

我需要创建一个 WordPress 页面,客户将使用该页面输入他们的电子邮件地址和电话号码的最后 4 位,以查询存储在 WordPress 中的信息(客户 ID、积分等)。

到目前为止,我已经使用带有高级自定义字段的 WpAllImport 从 CSV 文件导入了所有客户信息。所以信息就在那里,我只是停留在如何允许用户根据他们提交的内容查询他们的信息。

通常我会使用 LAMP 或 MERN 进行开发,但这必须使用 WP 来完成。有没有人做过这样的事情可以为我指明正确的方向?

【问题讨论】:

  • 您是否尝试让未登录的用户能够查看用户信息?您说您从 CSV 导入用户信息,这意味着这些用户尚未注册?对最终结果更具体一点,您是否尝试合并来自不同 CMS 的两个用户数据库?
  • 是的,他们不会登录。我希望他们能够在表单中输入他们的电子邮件地址和电话号码的最后 4 位,并检索他们的客户信息。我不想合并两个数据库。我工作的公司将在 WordPress 中每 24 小时更新一次 CSV 文件,并且 WpAllImport 将配置为导入。我希望这更清楚。我以前用 LAMP 堆栈构建过类似的东西,但客户坚持使用 WP。

标签: wordpress advanced-custom-fields custom-post-type wpallimport


【解决方案1】:

我们可以通过email_exists()初步检查邮件是否存在,如果存在,我们可以通过邮件槽get_user_by()获取用户,这将使我们能够获取用户电话。

if ( isset( $_GET['email'] ) && email_exists( $_GET['email'] ) ) {

    $user = get_user_by( 'email', $_GET['email'] );

    //...

};

然后我们需要确保用户知道电话号码。此时,身份被认为是经过验证的,我们可以转储用户对象 (WP_User)。请记住,与这种方法相关的安全性非常(非常)低,并且可能违反大多数国家(例如:欧盟国家)的个人隐私数据法。

if ( isset( $_GET['email'] ) && email_exists( $_GET['email'] ) ) {

    $user = get_user_by( 'email', $_GET['email'] );

    if ( isset( $_GET['phone'] ) && str_contains( $user->phone, $_GET['phone'] ) ) {

        var_dump( $user );

    };

};

另外最好的做法是实现某种security token validation (nonces)

nonce 是一个“使用一次的数字”,用于帮助保护 URL 和表单免受某些类型的滥用、恶意或其他方式的影响。 WordPress 随机数不是数字,而是由数字和字母组成的散列。它们也不是只使用一次,而是有一个有限的“生命周期”,之后它们就会过期。在此期间,将为给定上下文中的给定用户生成相同的随机数。该操作的随机数对于该用户将保持不变,直到该随机数生命周期完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2022-06-12
    相关资源
    最近更新 更多