【问题标题】:Retrieving Values From Gravity Forms for Custom User Meta从重力表单中检索自定义用户元数据的值
【发布时间】:2020-10-14 05:07:43
【问题描述】:

目前我对 Gravity Forms 有点失望。 这是我的设置: 我有一个使用 WPEverest 的用户注册 插件创建的自定义注册表单。该插件创建了一个自定义用户注册表单,与 WooCommerce 无缝集成,并将自定义字段保存到 USER,而不是单独的表中。

我正在尝试使用 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 ?)稍后我将尝试对复选框做同样的事情,但从单选按钮开始似乎更容易,因为它只返回一个值。

还是我在处理这个问题时完全错了?

提前感谢您的帮助!

【问题讨论】:

    标签: wordpress gravity-forms-plugin


    【解决方案1】:

    试试这样的。

    • 将表单 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 );
        
    }
    

    【讨论】:

      【解决方案2】:

      这是一个替代答案。我知道我最初的问题是询问 ID 号,但经过大量实验后,我了解到根本不需要此代码(它解决了我的问题的第二部分,“我处理这个问题错了吗?”) .

      重力表单实际上具有将数据写入自定义字段的内置功能(即使对于通过注册过程的用户也是如此),但本身不具备创建自定义字段的能力。我终于在Gravity Forms Documentation找到了这个信息。

      这样做非常简单,但您必须拥有 PRO 版本。 为此:

      1. 为帖子类型(或在本例中为用户元)创建自定义字段 - 您可以为此使用高级自定义字段,或在您的 functions.php 文件中使用自定义代码
      2. 使用表单构建器中高级表单项选项中的发布自定义字段表单项
      3. 发布自定义字段的自定义字段名称部分,选择“现有”,然后选择您从下拉列表中创建的字段名称。

      重力形式处理其余部分。

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

      希望这对某人有所帮助,因为gravity_post_submission 钩子……充其量是挑剔的——至少在我的经验中是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 2019-12-05
        相关资源
        最近更新 更多