我现在对重力形式有点沮丧。 这是我的设置: 我有一个使用WPEverest 的用户注册插件创建的自定义注册表。该插件创建了一个与WooCommerce无缝集成的自定义用户注册表单,并将自定义字段保存到USER,而不是在单独的表中。
我正在尝试使用重力表单来允许用户更新使用 WPEverest 的注册插件创建的字段(此时只是一些自定义用户元字段(,但我在获取字段值时遇到了很多时间。
我最大的问题是,我一辈子都无法弄清楚我应该通过什么get_post_custom_values();
。
下面的代码是我到目前为止拥有的代码。这应该在表单提交时向用户元字段传递一个值,它确实有效......但前提是我将值设置为手动创建的变量。如果我尝试从重力形式中提取数据,它将不起作用。
$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?稍后我将尝试使用复选框做同样的事情,但是从单选按钮开始似乎更容易,因为它只返回一个值。
还是我在处理这个问题时完全错了?
提前感谢您的帮助!
尝试这样的事情。
- 将表单 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 );
}
这是一个替代答案。我知道我最初的问题是询问 ID 号,但经过大量实验,我了解到根本不需要此代码(它解决了我问题的第二部分,"我处理这个问题是不是错了?
重力表单实际上具有将数据写入自定义字段的内置功能(即使对于通过注册过程的用户也是如此(,但本身不具有创建自定义字段的能力。我终于在重力表单文档中找到了这些信息。
这样做非常简单,但您必须拥有 PRO 版本。 为此:
- 为帖子类型(或在示例的情况下,用户元(创建自定义字段 - 您可以使用高级自定义字段之类的内容,或在函数中使用自定义代码.php文件
- 使用表单构建器中"高级表单项"选项中的">发布自定义域">表单项 从
- 发布自定义字段的自定义字段名称部分中,选择"现有",然后选择您从下拉列表中创建的字段的名称。
重力形式处理其余的。
因此,虽然Fredrik的答案是正确的,但如果您能够创建自定义字段,则可以仅使用Gravity Forms现有功能,并完全避免添加额外的代码。
希望这对某人有所帮助,因为gravity_post_submission钩子是......充其量是挑剔的——至少根据我的经验。