【问题标题】:Get Gravity forms entry ID after submitting the form in the gform_pre_send_email function在 gform_pre_send_email 函数中提交表单后获取 Gravity 表单条目 ID
【发布时间】:2019-02-28 09:32:54
【问题描述】:

在“gform_pre_send_email”函数中提交 for 后,我无法获取 Gravity Forms 条目 ID。

在 GF 日志中,条目 ID 可见:

DEBUG --> GFFormsModel::save_entry(): Saving entry. 
DEBUG --> GFFormsModel::save_entry(): **Entry record created in the database. ID: 95.** 
DEBUG --> GFFormsModel::save_entry(): Saving entry fields. 

在函数内将 $entry 设置为全局后,rgar( $entry, 'id' ) 和 var_dump( $entry ) 一样返回空值。 $form 数组也是如此。 $_POST 数组尚不包含条目 ID。

API 也返回空:GFAPI::get_entry( $entry_id )。

$wpdb->insert_id 确实提供了一个数字,但它不是条目的正确 ID。

我尝试了很多选择,阅读了很多帖子,完成了 Google。这似乎是一个简单的任务,但我错过了如何处理这个问题。

使用的代码:

add_filter( 'gform_pre_send_email', 'before_email' );
function before_email( $email ) {

    global $entry;
    $entryid = rgar( $entry, 'id' );

    //DEBUGGING
    echo '<br><br>POST:<br>';
    var_dump( $_POST );
    echo '<br><br>Entry:<br>';      
    var_dump( $entry );
    echo '<br><br>';

    $pattern = "PAYMENTLINK";
    $replacement = "<a href='https://******.***/checkout/?add-to-cart=44&entryid=$entryid' target='_blank'>https://******.***/pay</a>";
    $email['message'] = str_replace($pattern, $replacement, $email['message']);

    return $email;
}

如何获取刚刚提交的表单的条目ID?谢谢

【问题讨论】:

  • 您不需要将$entry 设置为全局,它已经传递给函数。我们可以看看你的代码吗?
  • @johnnyd23 当然,添加它!

标签: wordpress gravity-forms-plugin gravityforms


【解决方案1】:

好的,花了很多时间,找到了解决方案。看到这个就傻了..

1 个参数的函数:

add_filter( 'gform_pre_send_email', 'before_email' );
function before_email( $email ) {

具有 4 个参数的函数(注意 add_filter 中的 ,10 ,4):

add_filter( 'gform_pre_send_email', 'before_email' , 10, 4 );
function before_email( $email, $message_format, $notification, $entry) {

【讨论】:

    【解决方案2】:

    我认为问题只是您尝试在字符串中包含$entryid var 的方式。您需要从字符串中删除 var 并将其连接起来:

    $replacement = "<a href='https://******.***/checkout/?add-to-cart=44&entryid=".$entryid."' target='_blank'>https://******.***/pay</a>";
    

    http://php.net/manual/en/language.operators.string.php

    编辑

    另外,您需要将 $entry 对象传递给您的函数。您目前只传递 $email 变量:

    function before_email( $email, $message_format, $notification, $entry ) {
    

    【讨论】:

    • 没有,很遗憾它还是空的。
    • 尝试删除global $entry 行。电子邮件中链接的 URL 是什么?
    • 如果我没有将 $entry 设置为全局,我会得到:“注意:未定义的变量:进入...”
    • 给出以下错误:得到错误'PHP消息:PHP致命错误:未捕获的ArgumentCountError:函数before_email()的参数太少,1传入/......./wp-includes /class-wp-hook.php 位于第 288 行,而 /.../functions.php 中恰好有 4 个。或 2 如果我只使用:function before_email($email, $entry) {
    • var_dump( $form ) 也返回 NULL,所以我也无法获取路由数组。 docs.gravityforms.com/notification/#usage
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多