Получить идентификатор записи форм Gravity после отправки формы в функции gform_pre_send_email - PullRequest
0 голосов
/ 24 сентября 2018

У меня проблемы с получением идентификатора записи в Gravity Forms после отправки for в функции 'gform_pre_send_email'.

В журнале GF идентификатор записи отображается:

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 еще не содержит идентификатор записи.

Также API возвращает пустое значение: GFAPI :: get_entry ($ entry_id).

$ wpdb-> insert_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;
}

Как получить идентификатор записи только что отправленной формы?Спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ок, много часов провожу, решение найдено.Глупо видеть это ..

Функция с 1 аргументом:

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

Функция с 4 аргументами (обратите внимание на , 10, 4 в add_filter):

add_filter( 'gform_pre_send_email', 'before_email' , 10, 4 );
function before_email( $email, $message_format, $notification, $entry) {
0 голосов
/ 24 сентября 2018

Я думаю, проблема в том, как вы пытаетесь включить переменную $entryid в вашу строку.Вам нужно удалить переменную из строки и объединить ее:

$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

EDIT

Кроме того, вам нужно будет передать объект $ entryк вашей функции.В настоящее время вы передаете только переменную $ email:

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