这third party add-on plugin for Gravity Forms允许您在所选模板中嵌入表单时,通过前端编辑现有帖子。
您只需附加GET变量/参数?gform_post_id=1
到包含当前表单的URL末尾,它将使用现有帖子数据(来自帖子元字段等)预填充表单,然后在重新提交帖子时更新帖子。
这仅在使用以以下形式附加到URL的get style参数时有效?gform_post_id=1
... 哪里1
是本例中的post ID。
我不想要丑陋的URL,我想要漂亮的URL,所以我使用以下重写规则来整理我的永久链接;
function gform_rewrite(){
global $wp_rewrite;
add_rewrite_tag(\'%gform_post_id%\',\'([^&]+)\');
add_rewrite_rule(
\'^user/account/edit/([^/]*)/?\',
\'index.php?page_id=183&gform_post_id=$matches[1]\',\'top\'
);
}
这就需要这个,
/index.php?page_id=100&gform_post_id=1
。。。考虑到这一点,
/user/account/edit/1
我的
query_vars
如您在
var_dump
["query_vars"]=>
array(56) {
["page_id"]=>
int(100)
["gform_post_id"]=>
string(3) "1"
//....etc
当然,虽然有了漂亮的永久链接
$_GET
变量不再保存
gform_post_id
参数,这意味着尽管以下内容根据上述重写规则显示了正确的目标,
/user/account/edit/1
。。。它不会像直接通过访问同一页面时那样使用post数据预先填充我的表单,
/index.php?page_id=100&gform_post_id=1
有什么想法吗?
注:
plugin 正如我在开场白中所链接的,声明了以下几行;
$this->get_post_object($_REQUEST[$this->options[\'request_id\']]);
。。。从$\\u请求变量中提取数据;
选项request_id
已映射到gform_post_id
应将其设置为$_GET
可变参数。
public $options = array(
\'request_id\' => \'gform_post_id\' // here we are...
,\'post_status\' => \'default\'
,\'capabilities\' => array(
\'update\' => \'default\'
,\'delete\' => \'disable\'
)
,\'entries\' => true
);
我试着在
request
筛选并设置
$_GET
我自己变了,但没用。我可能会在文章的后面提到,但就目前而言,我有点不确定如何在不直接修改插件本身的情况下解决这个问题。
最合适的回答,由SO网友:Adam 整理而成
我的问题的解决方案是最终在插件的init上解开构造函数,然后在wp
钩
global $gform_update_post;
remove_action( \'init\', array($gform_update_post, \'init\'), 100 );
add_action( \'wp\', array($gform_update_post, \'init\'), 100 );
这意味着我现在可以访问:
/user/account/edit/1
。。。在本例中,我的表单已成功预填充与帖子ID相关的数据
1
.
但是,当重新提交此表单时,它会创建一个新的帖子ID,而不是更新原始帖子ID1
如URL所示。
因此,在我的情况下,我做到了这一点;
global $gform_update_post;
add_action( \'wp\', array($gform_update_post, \'init\'), 100 );
。。。我没有删除插件中的原始构造操作,而是将其保留在原来的位置,而是在
wp
钩子,确保所有必要的重力表单钩子都在正确的位置触发,以允许表单更新我正在编辑的相同帖子ID(如URL所示)。
除此之外,我不想费心去弄清楚插件中到底是什么导致了这个更新vs创建新的帖子ID怪癖。
如果其他人使用我的OP中列出的Gravity Forms附加组件进行此操作,您仍然需要设置$_GET
或$_REQUEST
上的变量request
动作钩,如:
add_filter( \'request\', \'alter_the_query\', 1 );
function alter_the_query( $request ) {
$_REQUEST[\'gform_post_id\'] = $request[\'gform_post_id\'];
return $request;
}