将提交时的重力表单重定向到刚刚创建的帖子

Posted

技术标签:

【中文标题】将提交时的重力表单重定向到刚刚创建的帖子【英文标题】:Redirect gravity form on submission to post just created 【发布时间】:2013-09-27 02:27:41 【问题描述】:

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

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

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 过滤器进行重定向,但我找不到合适的。

【问题讨论】:

【参考方案1】:

钩子“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;

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于将提交时的重力表单重定向到刚刚创建的帖子的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后PHP重定向到另一个页面

如何为未登录用户保存重力表单数据

前端登录:重定向到用户创建的帖子

在用户填写提交表单后将其重定向到他们的提交

如何在Vue中提交表单,重定向到新路由并传递参数?

我应该在提交表单后使用 301、302 还是 303 重定向?