从自定义用户元的重力形式中检索值

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版本。 为此:

  1. 为 post 类型创建一个自定义字段(或者在示例的情况下,用户元)- 您可以为此使用高级自定义字段之类的东西,或者在 functions.php 中使用自定义代码文件
  2. 使用表单构建器中高级表单项选项中的Post自定义字段表单项
  3. Post 自定义字段的自定义字段名称 部分,select“现有”,然后是您从下拉列表中创建的字段的名称。

Gravity Forms 处理剩下的事情。

因此,虽然 Fredrik 的回答是正确的,但如果您能够创建自定义字段,则可以只使用 Gravity Forms 的现有功能并完全避免添加额外的代码。

希望这对某些人有所帮助,因为 gravity_post_submission 挂钩是......充其量是挑剔的 - 至少根据我的经验。