首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联系表格7& Flamingo -领取Flamingo邮政ID作为邮件标签

联系表格7& Flamingo -领取Flamingo邮政ID作为邮件标签
EN

Stack Overflow用户
提问于 2021-07-01 11:47:36
回答 1查看 616关注 0票数 1

在WordPress网站上,我使用联系人表单7和Flamingo来管理联系人表单,并存储数据。

在我的电子邮件中,我一直在使用_serial_number识别存储在Flamingo中的一份意见书。该序列号被添加到打开页面的链接中,并查询数据库中的提交(按序列号),以便在线显示接收电子邮件的用户的所有信息。

我今天已经意识到,您创建的每个表单都会重置序列号。例如:表单1提交序列号从1开始,增加到10 (例如)。如果我做了表格2,提交的序列号再次从1开始。

这造成了一个问题,因为有多个帖子具有相同的序列号,所以我不能保证得到正确的提交。

在任何地方,我都看不出将Flamingo作为邮件标记的方法,我查看了Flamingo的代码,看不到任何钩子,这些钩子允许我将帖子的ID添加到CF7中的邮件标记中。

有人知道这是否可能吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-21 01:36:59

我解决了这个问题,通过每次表单提交创建和存储自己的唯一令牌,并通过meta_query获得Flamingo帖子,而不是试图通过serial_number获取帖子。不幸的是,它无法解决缺乏自定义令牌的历史提交的问题。

  1. 在CF7窗体选项卡中为令牌创建一个字段。在我的例子中,我使用CF7动态文本扩展来获得cookie值,但它甚至可以是静态文本。您只需要一个可以稍后修改的唯一字段。

代码语言:javascript
复制
[dynamichidden prtoken "DT_CF7_COOKIE key='dealer_id'"]

  1. 生成实际的令牌值,并用它替换字段内容。我使用了字段值+ unix +一个伪随机blob,这样我就可以看到是谁生成了它,并且是什么时候生成的,但这是不可猜测的。我的应用程序风险相对较低,我不是安全专家。

代码语言:javascript
复制
// define the wpcf7_posted_data callback
function action_wpcf7_posted_data( $array ) { 
    
    if( !empty( $array['prtoken'] ) ) {
    
        //Generate real token
        $prtoken = $array['prtoken'] . '_' . time() . '_' .  bin2hex(random_bytes(8));
        
        if( !empty( $prtoken ) ) {
            $array['prtoken'] = $prtoken;
        }
    }

    return $array;
}; 

在我的例子中,令牌在电子邮件模板:

  1. 的链接上形成查询字符串的一部分:

代码语言:javascript
复制
<a href="https://example.com/reply-form/?serial_number=[_serial_number]&first-name=[first-name]&surname=[surname]&reply_token=[prtoken]">Reply</a>

  1. 获得与令牌匹配的帖子。应该仅为0或1,但将其视为可能匹配多个火烈鸟项目,以防万一。

代码语言:javascript
复制
$args = array(
            'post_type'  => 'flamingo_inbound',
            'fields' => 'ids', //Only return IDS
            'meta_query' => array(
                array(
                    'key'   => '_field_prtoken', //The custom token field
                    'value' => sanitize_text_field($field_prtoken), //The token is input by users retrieving data so needs to be sanitized.
                )
            )
        );
$postslist = get_posts( $args );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68209618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档