【问题标题】:Gravity Forms - Get a Date value and adjust it, make it into a merge tag重力形式 - 获取日期值并调整它,使其成为合并标签
【发布时间】:2019-08-02 09:48:10
【问题描述】:

所以我想要做的是获取一个字段值,一个日期字段,并为其添加一个设定的时间段,然后将其制成一个合并标签,然后我可以将其添加回该值或使用别的地方。

我知道如何制作新的合并标签,这不是问题。我的问题是如何获得要在该计算中使用的字段值?

add_filter( 'gform_replace_merge_tags', 'new_date_plus_30', 10, 7 );
function new_date_plus_30( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) {
    $merge_tag = '{date_plus_30}';

    $new_date = date('m/d/Y', strtotime('+30 days'));

    return str_replace( $merge_tag, $new_date, $text );
}

因此,在我进行新日期计算的地方,我需要能够从该帖子中提取一个字段并使用它。

我也在考虑做一个 If / Else 脚本,我将根据表单中设置的内容进行日期计算。因此,如果用户说每 15 天重复一次,我会这样:

add_filter('gform_replace_merge_tags', 'new_date_plus_30', 10, 7); 函数 new_date_plus_30( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) {

if ( $form_id == 34 && $field_id == 2 && $value == 'add 30 days') {

$merge_tag = '{date_plus_30}';
$new_date = date('m/d/Y', strtotime('+30 days'));

}
else if ( $form_id == 34 && $field_id == 2 && $value == 'first of month') {

  $merge_tag = '{first_of_month}';
  $new_date = date('m/d/Y', strtotime('first of next month'));

 }

}

return str_replace( $merge_tag, $new_date, $text );


}

但我的问题还是一样。如何同时使用两个过滤器?我假设我需要使用 gform_get_input_value。请检查我的代码并提供反馈还有其他方法吗?

【问题讨论】:

    标签: gravity-forms-plugin gravityforms


    【解决方案1】:

    或者可能是这样的......

         add_filter( 'gform_merge_tag_filter', function ( $value, $merge_tag, $options, $field, $raw_value ) {
        if ( $field->id == '2' && $value == 'first of the month') {
           $merge_tag = '{the_next_date}';
           $thedatetochange = 'Not sure how to get the date value here...';
           $value = date('m/d/Y', strtotime($thedatetochange . 'first of the next month'));
    
           return $value;
        }
    else if ( $field->id == '2' && $value == 'the 15th') {
           $merge_tag = '{the_next_date}';
           $thedatetochange = 'Not sure how to get the date value here...';
           $the_first_date = date('m/d/Y', strtotime($thedatetochange . 'first of the next month' ));
           $value = date('m/d/Y', strtotime($the_first_date . '+15 days' ));
    
           return $value;
        }
    }, 10, 5 );
    

    【讨论】:

      【解决方案2】:

      那么在进行更多挖掘之后,我是否可以使用类似的东西来获取字段的值?

      $theDateToChange = rgar( $entry, ‘3’);
      

      这假定字段 3 是日期值。这对检索当前输入日期有用吗?

      【讨论】:

        【解决方案3】:

        $entry 通过 gform_replace_merge_tags 过滤器。您可以通过其字段 ID 从 $entry 获取任何字段值。例如,如果您的字段 ID 为 1:

        $value = $entry[1];
        

        或者,如果您愿意将此修改后的日期捕获为表单中的辅助日期字段,我们有一个 sn-p 可以为您处理该功能。

        https://gravitywiz.com/populate-dates-gravity-form-fields/

        new GW_Populate_Date( array(
         'form_id' => 1,
         'target_field_id' => 2,
         'modifier' => '+30 days'
        ) );
        

        【讨论】:

        • 嘿,大卫,我实际上读了好几遍那篇文章,看看我能不能用我的文章做点什么。我遇到的问题是我需要添加 if / else 功能。我或多或少需要创建多个 GW_Populate_date 数组。相信我,我非常热衷于这样做。但我需要能够根据用户定义的选项将日期更新 1 个月、3 个月、6 个月和 1 年。
        【解决方案4】:

        这是我当前的工作代码...

            add_action( 'gform_admin_pre_render', 'add_merge_tags' );
        function add_merge_tags( $form ) {
            ?>
            <script type="text/javascript">
                gform.addFilter('gform_merge_tags', 'add_merge_tags');
                function add_merge_tags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option){
                    mergeTags["custom"].tags.push({ tag: '{the_next_date}', label: 'The Next Date' });
        
                    return mergeTags;
                }
            </script>
            <?php
            //return the form object from the php hook
            return $form;
        }
        
        add_action('wp', 'add_merge_tags');
        
        /** MY MERGE TAGS HERE */
        
        add_filter( 'gform_replace_merge_tags', 'new_date', 10, 7 ); 
        function new_date( $value, $merge_tag, $options, $field, $raw_value, $entry, $text, $form, $url_encode, $esc_html, $nl2br, $format ) {
        
            $pmoptions = $entry[7];
        
        if ( $pmoptions == 'Monthly') {
        
               $merge_tag = '{the_next_date}';
               $old_date = $entry[2];
               $new_date = date('m/d/Y', strtotime( $old_date . '+1 month'));
        
               return str_replace( $merge_tag, $new_date, $text );
            }
        else if ( $pmoptions == 'Quarterly') {
        
               $merge_tag = '{the_next_date}';
               $old_date = $entry[2];
               $new_date = date('m/d/Y', strtotime( $old_date . '+3 month'));
        
               return str_replace($merge_tag, $new_date, $text);
            }
        }
        
        apply_filters( 'gform_replace_merge_tags', $value, $merge_tag, $options, $field, $raw_value, $entry, $text, $form, $url_encode, $esc_html, $nl2br, $format );
        

        【讨论】:

          猜你喜欢
          • 2016-12-05
          • 2015-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-25
          相关资源
          最近更新 更多