Получите идентификатор записи формы Gravity после отправки формы в функции gform_pre_send_email

У меня возникли проблемы с получением идентификатора записи Gravity Forms после отправки запроса в функцию 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 еще не содержит ID записи.

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

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

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


person Peps    schedule 24.09.2018    source источник
comment
Вам не нужно устанавливать $entry как глобальный, он уже передан в функцию. Можем ли мы увидеть ваш код?   -  person johnnyd23    schedule 24.09.2018
comment
@ johnnyd23 конечно добавил!   -  person Peps    schedule 24.09.2018


Ответы (2)


Я думаю, проблема просто в том, как вы пытаетесь включить $entryid 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 ) {
person johnnyd23    schedule 24.09.2018
comment
Нет, к сожалению, он все еще пуст. - person Peps; 24.09.2018
comment
Попробуйте удалить строку global $entry. Каков URL-адрес ссылки в электронном письме? - person johnnyd23; 24.09.2018
comment
Если я не устанавливаю $ entry как глобальную, я получаю: Примечание: неопределенная переменная: запись в ... - person Peps; 24.09.2018
comment
Выдает следующую ошибку: "Получена ошибка" Сообщение PHP: Неустранимая ошибка PHP: Uncaught ArgumentCountError: слишком мало аргументов для функции before_email (), 1 передан в /......./wp-includes/class-wp-hook.php в строке 288 и ровно 4 ожидаемых в /.../functions.php. Или 2 ожидаемых, если я использую только: function before_email ($ email, $ entry) { - person Peps; 25.09.2018
comment
var_dump ($ form) также возвращает NULL, поэтому я тоже не могу получить массив маршрутизации. docs.gravityforms.com/notification/#usage - person Peps; 25.09.2018
comment
Вы включаете все 4 аргумента? Из-за этой ошибки похоже, что вы все еще проходите только 1 - person johnnyd23; 25.09.2018
comment
да, появляется эта ошибка (см. следующий комментарий) при использовании: function before_email ($ email, $ message_format, $ notification, $ entry) {} - person Peps; 25.09.2018
comment
Получена ошибка 'Сообщение PHP: Неустранимая ошибка PHP: Uncaught ArgumentCountError: Слишком мало аргументов для функции before_email (), 1 передан в /../class-wp-hook.php в строке 288 и ровно 4 ожидается в /…./functions. php: 50 \ nТрассировка стека: \ n # 0 /…/class-wp-hook.php(288): before_email (массив) \ n # 1 /…/plugin.php(203): WP_Hook- ›apply_filters (массив, Массив) \ n # 2 /…/gravityforms/common.php(2056): apply_filters ('gform_pre_send _...', Array, 'html', Array, Array) \ n # 3 /../gravityforms/common.php (1825): GFCommon :: send_email ('XXX @ ZZZZZZ ...', XXXX @ gm ... ',' XXXX @ ZZZZZZZ .. ',' XXXX @ ZZZZZZ ... 'referer: xxx.xxxx / xxxx / xxxx - person Peps; 25.09.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) {
person Peps    schedule 25.09.2018