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

【问题讨论】:

    标签: php wordpress forms gravity-forms-plugin


    【解决方案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;
      }
      

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

      【讨论】:

        猜你喜欢
        • 2014-05-15
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多