从自定义用户元的重力形式中检索值
Retrieving Values From Gravity Forms for Custom User Meta
目前我对 Gravity Forms 有点失望。
这是我的设置:
我有一个使用 WPEverest 的用户注册 插件创建的自定义注册表单。这个插件创建一个自定义的用户注册表单,与 WooCommerce 无缝集成,并将自定义字段保存到用户,而不是单独的 table.
我正在尝试使用 Gravity Forms 来允许用户更新使用 WPEverest 的注册插件创建的字段(此时只是一些自定义用户元字段),但我获取字段值真是太糟糕了。
我最大的问题是我这辈子都想不通我应该传递的到底值是多少get_post_custom_values();
。
下面的代码是我目前所拥有的。这应该在表单提交时将一个值传递给用户元字段,并且它确实有效......但前提是我将该值设置为手动创建的变量。如果我尝试从 Gravity Forms 中提取数据,它将不起作用。
$gravity_form_id = '10'; // Gravity Forms ID
add_action("gform_after_submission_$gravity_form_id", "gravity_post_submission", 10, 2);
function gravity_post_submission ($entry, $form){
$post_id = $entry["post_id"];
//trying to get values from gravity form
$values = get_post_custom_values("field_name???", $post_id);
//updating user meta
update_post_meta($current_user->ID, 'user_registration_body_type', $values);
}
作为参考,我使用的表单对象是 ID 为 10 的 RADIO 类型,参数名称为 body_type(我使用此名称作为预填充表单字段的方式).
表单域的呈现方式如下:
<div class="ginput_container ginput_container_radio">
<ul class="gfield_radio" id="input_14_10">
<li class="gchoice_14_10_0">
<input name="input_10" type="radio" value="apple" id="choice_14_10_0">
<label for="choice_14_10_0" id="label_14_10_0">Apple</label>
</li>
<li class="gchoice_14_10_1">
<input name="input_10" type="radio" value="full-bust" id="choice_14_10_1">
<label for="choice_14_10_1" id="label_14_10_1">Full Bust</label>
</li>
<li class="gchoice_14_10_2">
<input name="input_10" type="radio" value="hourglass" checked="checked" id="choice_14_10_2">
<label for="choice_14_10_2" id="label_14_10_2">Hourglass</label>
</li>
<li class="gchoice_14_10_3">
<input name="input_10" type="radio" value="pear" id="choice_14_10_3">
<label for="choice_14_10_3" id="label_14_10_3">Pear</label>
</li>
<li class="gchoice_14_10_4">
<input name="input_10" type="radio" value="straight" id="choice_14_10_4">
<label for="choice_14_10_4" id="label_14_10_4">Straight</label>
</li>
</ul>
</div>
TL;DR - 我应该用什么替换 form_field???
以检索表单字段值?我应该使用什么 ID 或姓名? (例如:input_10、input_14_10、body_type?)稍后我会尝试对复选框做同样的事情,但从单选按钮开始似乎更容易,因为它只 returns一个值。
还是我完全错误地解决了这个问题?
在此先感谢您的帮助!
尝试这样的事情。
- 将表单 ID 添加到 gform_after_submission_。看起来您使用的是表单 ID 14,但此代码适用于表单 ID 10。
- 使用rgar指定字段id(10)
- 使用update_user_meta
- 获取当前用户 ID(这意味着您必须先登录才能提交表单。
add_action("gform_after_submission_10", "gravity_post_submission", 10, 2);
function gravity_post_submission ($entry, $form){
//Gets field id 10
$values = rgar( $entry, '10' );
//updating user meta
update_user_meta( get_current_user_id(), 'user_registration_body_type', $values );
}
这是备选答案。我知道我最初的问题是询问身份证号码,但经过大量实验后,我了解到根本不需要这段代码(它解决了我问题的第二部分,“我是不是错误地处理了这个问题?”) .
Gravity forms 实际上具有将数据写入自定义字段的内置功能(即使对于通过注册过程的用户),但它本身没有创建自定义字段的功能。我终于在 Gravity Forms Documentation.
中找到了这个信息
这样做很简单,但是你得有PRO版本。
为此:
- 为 post 类型创建一个自定义字段(或者在示例的情况下,用户元)- 您可以为此使用高级自定义字段之类的东西,或者在 functions.php 中使用自定义代码文件
- 使用表单构建器中高级表单项选项中的Post自定义字段表单项
- 从 Post 自定义字段的自定义字段名称 部分,select“现有”,然后是您从下拉列表中创建的字段的名称。
Gravity Forms 处理剩下的事情。
因此,虽然 Fredrik 的回答是正确的,但如果您能够创建自定义字段,则可以只使用 Gravity Forms 的现有功能并完全避免添加额外的代码。
希望这对某些人有所帮助,因为 gravity_post_submission 挂钩是......充其量是挑剔的 - 至少根据我的经验。
目前我对 Gravity Forms 有点失望。 这是我的设置: 我有一个使用 WPEverest 的用户注册 插件创建的自定义注册表单。这个插件创建一个自定义的用户注册表单,与 WooCommerce 无缝集成,并将自定义字段保存到用户,而不是单独的 table.
我正在尝试使用 Gravity Forms 来允许用户更新使用 WPEverest 的注册插件创建的字段(此时只是一些自定义用户元字段),但我获取字段值真是太糟糕了。
我最大的问题是我这辈子都想不通我应该传递的到底值是多少get_post_custom_values();
。
下面的代码是我目前所拥有的。这应该在表单提交时将一个值传递给用户元字段,并且它确实有效......但前提是我将该值设置为手动创建的变量。如果我尝试从 Gravity Forms 中提取数据,它将不起作用。
$gravity_form_id = '10'; // Gravity Forms ID
add_action("gform_after_submission_$gravity_form_id", "gravity_post_submission", 10, 2);
function gravity_post_submission ($entry, $form){
$post_id = $entry["post_id"];
//trying to get values from gravity form
$values = get_post_custom_values("field_name???", $post_id);
//updating user meta
update_post_meta($current_user->ID, 'user_registration_body_type', $values);
}
作为参考,我使用的表单对象是 ID 为 10 的 RADIO 类型,参数名称为 body_type(我使用此名称作为预填充表单字段的方式).
表单域的呈现方式如下:
<div class="ginput_container ginput_container_radio">
<ul class="gfield_radio" id="input_14_10">
<li class="gchoice_14_10_0">
<input name="input_10" type="radio" value="apple" id="choice_14_10_0">
<label for="choice_14_10_0" id="label_14_10_0">Apple</label>
</li>
<li class="gchoice_14_10_1">
<input name="input_10" type="radio" value="full-bust" id="choice_14_10_1">
<label for="choice_14_10_1" id="label_14_10_1">Full Bust</label>
</li>
<li class="gchoice_14_10_2">
<input name="input_10" type="radio" value="hourglass" checked="checked" id="choice_14_10_2">
<label for="choice_14_10_2" id="label_14_10_2">Hourglass</label>
</li>
<li class="gchoice_14_10_3">
<input name="input_10" type="radio" value="pear" id="choice_14_10_3">
<label for="choice_14_10_3" id="label_14_10_3">Pear</label>
</li>
<li class="gchoice_14_10_4">
<input name="input_10" type="radio" value="straight" id="choice_14_10_4">
<label for="choice_14_10_4" id="label_14_10_4">Straight</label>
</li>
</ul>
</div>
TL;DR - 我应该用什么替换 form_field???
以检索表单字段值?我应该使用什么 ID 或姓名? (例如:input_10、input_14_10、body_type?)稍后我会尝试对复选框做同样的事情,但从单选按钮开始似乎更容易,因为它只 returns一个值。
还是我完全错误地解决了这个问题?
在此先感谢您的帮助!
尝试这样的事情。
- 将表单 ID 添加到 gform_after_submission_。看起来您使用的是表单 ID 14,但此代码适用于表单 ID 10。
- 使用rgar指定字段id(10)
- 使用update_user_meta
- 获取当前用户 ID(这意味着您必须先登录才能提交表单。
add_action("gform_after_submission_10", "gravity_post_submission", 10, 2);
function gravity_post_submission ($entry, $form){
//Gets field id 10
$values = rgar( $entry, '10' );
//updating user meta
update_user_meta( get_current_user_id(), 'user_registration_body_type', $values );
}
这是备选答案。我知道我最初的问题是询问身份证号码,但经过大量实验后,我了解到根本不需要这段代码(它解决了我问题的第二部分,“我是不是错误地处理了这个问题?”) .
Gravity forms 实际上具有将数据写入自定义字段的内置功能(即使对于通过注册过程的用户),但它本身没有创建自定义字段的功能。我终于在 Gravity Forms Documentation.
中找到了这个信息这样做很简单,但是你得有PRO版本。 为此:
- 为 post 类型创建一个自定义字段(或者在示例的情况下,用户元)- 您可以为此使用高级自定义字段之类的东西,或者在 functions.php 中使用自定义代码文件
- 使用表单构建器中高级表单项选项中的Post自定义字段表单项
- 从 Post 自定义字段的自定义字段名称 部分,select“现有”,然后是您从下拉列表中创建的字段的名称。
Gravity Forms 处理剩下的事情。
因此,虽然 Fredrik 的回答是正确的,但如果您能够创建自定义字段,则可以只使用 Gravity Forms 的现有功能并完全避免添加额外的代码。
希望这对某些人有所帮助,因为 gravity_post_submission 挂钩是......充其量是挑剔的 - 至少根据我的经验。