使用自定义插件函数的输出填充表单域

时间:2018-12-28 作者:b_dubb

我需要在表单中添加一个唯一的字符串作为客户的标识符。我创建了一些输出字符串的函数。我想用一个短代码填充一个表单字段。运气不太好。

function ABC_validUniqueStr($attr){
  $length = $attr[\'length\']; // num (int)
  $char = $attr[\'char\']; // num, alpha, alphanum
  $case = $attr[\'case\']; // $case, true vary case, false upper case
  $validStr = \'\';
  do {
    // $string = ABC_form_number_alpha_numeric($length,$char,$case);
    $string = ABC_form_number_alpha_numeric($length=13,$char=\'num\',$case=false);
    $result = ABC_test_unique_form_number($string);
    if( $result[0]->count == \'0\' ) {
      $validStr = $string;
    }
  } while( $validStr == \'\' );
  return $validStr;
}

function ABC_form_number_alpha_numeric($length=13,$char=\'num\',$case=false) {
  $formNumberAlphaNumericStr = \'\';
  for( $i = 0; $i < $length; $i++ ){
    if( $char == \'num\' ) {
      $formNumberAlphaNumericStr .= rand(0,9);
    } elseif ( $char == \'alpha\' ) {
      $num = rand(0,25);
      $formNumberAlphaNumericStr .= ABC_retunAlpha($num,$case);
    } elseif ( $char == \'alphanum\' ) {
      $rando = rand(0,1);
      if( $rando == 0 ) {
        $formNumberAlphaNumericStr .= rand(0,9);
      } else {
        $num = rand(0,25);
        $formNumberAlphaNumericStr .= ABC_retunAlpha($num,$case);
      }
    } else {
      $formNumberAlphaNumericStr = \'error\';
    }
  }
  // var_dump($formNumberAlphaNumericStr);
  return $formNumberAlphaNumericStr;
}

function ABC_test_unique_form_number($str){
    global $wpdb;
  $sqlStr = "select count(*) as count from ".$wpdb->prefix."ABC_app_invoicenumber ";
  $sqlStr .= "where invoicenum = \'%s\'";
  $prepSql = $wpdb->prepare($sqlStr,$str);
  return $wpdb->get_results($prepSql);
}

function ABC_retunAlpha($num,$case){
  if( $num >= 0 && $num < 26 ) {
    $upperAlphaArr = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N",
                                "O","P","Q","R","S","T","U","V","W",\'X\',"Y","Z");
    if( $case == 0 ) {
      return $upperAlphaArr[$num];
    } else {
      return strtolower($upperAlphaArr[$num]);
    }
  } else {
    return array(\'error\'=>\'num out of range\');
  }
}

add_shortcode(\'ABC_form_number\',\'ABC_validUniqueStr\');

add_filter( \'gform_shortcode_ABC_form_number\', \'ABC_validUniqueStr\');
从我的隐藏输入字段(在Gravity Forms config tool中),我正在使用[ABC_form_number length="13" char="num" case="false"]. 在invoicenum字段中看不到任何数据。

编辑:更新了代码示例。我能够应用WP短代码,并将插件中的字符串输出到帖子中。尝试使用这种方法在重力表单中填充字段是行不通的。这里有一个指向Gravity表单中一些文档的链接,这些文档看起来是相关的。无法将此应用于修复。https://docs.gravityforms.com/gform_shortcode_form_property/

1 个回复
SO网友:T.Todua

您可以使用预填充字段gform_field_value_$parameter_name 钩子,在哪里$parameter_name 字段/参数的名称。例如,如果您将其添加到代码中:

add_filter(\'gform_field_value_invoice_numb\', \'my_func\');
function my_func( $value ) {
    return do_shortcode(\'[ABC_form_number length="13" char="num" case="false"]\');
}
(注:Allow field to be populated dynamically 选项需要启用)

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。