Перенаправить гравитационную форму при отправке на только что созданную публикацию

У меня есть гравитационная форма, которая создает пользовательский пост, и в настоящее время при отправке он отображает подтверждающее сообщение в соответствии с настройками формы.

Вместо того, чтобы отображать подтверждающее сообщение, я хочу перенаправить страницу на запись, которую только что создала форма.

В Gravity Forms есть фильтр gform_confirmation (или gform_confirmation_[form_id] для таргетинга на конкретную форму), который работает следующим образом:

<?php
add_filter('gform_confirmation', 'reroute_confirmation', 10, 4);
function reroute_confirmation($form, $lead, $confirmation, $ajax) {
    $confirmation = array('redirect' => 'http://target_url.com');
    return $confirmation;
} ?>

Моя проблема в том, что я не знаю, что такое URL-адрес, потому что он будет определяться слагом пользовательского сообщения, созданного формой.

Я попробовал var_dump из $lead и $form, чтобы узнать, сообщил ли он мне новый идентификатор сообщения, но, похоже, это не так.

Я пробовал то же самое с фильтром gform_entry_post_save, но и там не было радости.

Я предполагаю, что какой-то хук покажет идентификатор сообщения (или слаг), и я могу работать оттуда, чтобы использовать фильтр gform_confirmation для перенаправления, я просто не могу найти правильный.


person terraling    schedule 21.09.2013    source источник


Ответы (2)


Хук «gform_after_submission» имеет объект $entry с доступной ему информацией о недавно созданном сообщении, включая post_id.

Итак, вооружившись post_id, я могу перенаправить.

<?php
add_action('gform_after_submission', 'redirect_on_post', 10, 2);
function redirect_on_post($entry, $form) {
    $post_id = $entry['post_id'];
    $post_name = get_permalink('$post_id');
    wp_redirect($post_name);
    exit;
}
person terraling    schedule 22.09.2013

Ваше решение на самом деле не сработало для меня (форма, казалось, просто сидела там после того, как я ее отправил - страница вообще не изменилась, а небольшая анимация «пожалуйста, подождите» продолжалась вечно). Я думаю, что это может быть как-то связано с AJAX, чего я не понимаю. :)

Внутри действия gform_confirmation у вас также есть доступ к идентификатору сообщения, за исключением массива $lead вместо $entry. Итак, вы можете сделать:

function my_gform_confirmation($confirmation, $form, $lead, $ajax){
$pid = $lead['post_id'];
$confirmation = array("redirect" => get_site_url() . "/?p=$pid");
return $confirmation;
}

Это вернет пользователя к исходному сообщению. Даже если у него длинный адрес постоянной ссылки, приведенное выше перенаправит вас на нужный пост. Нет необходимости разрешать его до полной ссылки.

person Chris Rae    schedule 22.10.2013