3

我有一个重力表单,它创建一个自定义帖子,目前,在提交时,它会根据表单设置显示确认消息。

我不想显示确认消息,而是想将页面重定向到表单刚刚创建的帖子。

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 是什么,因为它将由表单创建的自定义帖子的 slug 确定。

我尝试了 $lead 和 $form 的 var_dump 来查看它是否告诉我新的帖子 ID,但它们似乎没有。

我对 gform_entry_post_save 过滤器进行了同样的尝试,但也没有任何乐趣。

我猜一些钩子会显示帖子 ID(或 slug),我可以从那里工作以使用 gform_confirmation 过滤器进行重定向,但我找不到合适的。

4

2 回答 2

6

钩子“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;
}
于 2013-09-22T08:53:18.017 回答
0

您的解决方案实际上对我不起作用(表单似乎在我提交后就坐在那里 - 页面根本没有改变,“请稍候”的小动画一直持续下去)。我认为这可能与AJAX有关,我不明白。:)

在 gform_confirmation 操作中,您实际上也可以访问帖子 ID,但在 $lead 数组而不是 $entry 中除外。所以你可以这样做:

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

这会将用户发送回原始帖子。即使它有一个很长的永久链接地址,上面的内容也会将您重定向到正确的帖子。无需将其解析为完整链接。

于 2013-10-22T21:32:48.027 回答