0

在“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。

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

使用的代码:

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?谢谢

4

2 回答 2

0

我认为问题只是您尝试将$entryidvar 包含在字符串中的方式。您需要从字符串中删除 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 ) {
于 2018-09-24T20:38:58.013 回答
0

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

带 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) {
于 2018-09-25T19:17:58.860 回答