我有一个创建自定义帖子的重力表单,目前,在提交时它会根据表单设置显示确认消息。
我想将页面重定向到表单刚刚创建的帖子,而不是显示确认消息。
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过滤器重定向,我找不到合适的。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
你的解决方案实际上对我不起作用(表格似乎只是在我提交之后就坐在那里 - 页面根本没有改变而且很少有&#34;请等待&#34;动画继续前进)。我认为这可能与AJAX有关,我不明白。 :)
在gform_confirmation操作中,除了$ lead数组而不是$ entry之外,您实际上还可以访问帖子ID。所以你可以这样做:
function my_gform_confirmation($confirmation, $form, $lead, $ajax){
$pid = $lead['post_id'];
$confirmation = array("redirect" => get_site_url() . "/?p=$pid");
return $confirmation;
}
这会将用户发回原始帖子。即使它有一个很长的永久链接地址,上面的内容也会将你重定向到正确的帖子。没有必要将其解析为完整链接。