Gravity Form sollte Daten aus MySQL extrahieren
P粉447495069
P粉447495069 2024-03-30 00:05:24
0
2
464

Ich versuche, eine Art Funktion zur Passwortwiederherstellung zu entwickeln (fragen Sie nicht warum).

Ich habe eine WordPress-Website und verwende ein Schwerkraftformular, um Kunden nach ihren E-Mail-Adressen zu fragen. Ich möchte diese Adresse dann verwenden, um das entsprechende Woo-Commerce-Produkt zu finden, dem dieselbe E-Mail-Adresse als benutzerdefiniertes Attribut (pa_e-mail) hinzugefügt wurde. Ich möchte dann ein anderes Attribut verwenden, nämlich das Passwort (keine extrem starke Sicherheit, MD5, Hashing usw. erforderlich) als benutzerdefiniertes Attribut (pa_pw) zu speichern und dieses Passwort zurück an Gravity Forms zu senden, um es per E-Mail an den Benutzer zu senden. Außerdem möchte ich über einen Permalink einen Link zum Produkt senden.

Mein Code befindet sich bisher in „functions.php“ und innerhalb der Schwerkraftform habe ich zwei Textfelder, die dynamisch gefüllt werden können. (edit_pw und edit_link)

function get_pw_by_email( $email ) {
  // Get all products
  $products = wc_get_products( array(
      'limit' => -1,
      'status' => 'publish', 
  ) );

  // Loop through the products
  foreach ( $products as $product ) {
      // Get the value of the "pa_e-mail" attribute
      $pa_email = $product->get_attribute('pa_e-mail');
      // Check if the "pa_e-mail" attribute matches the email
      if ( $pa_email == $email ) {
          // Get the value of the "pa_pw" attribute
          $pa_pw = $product->get_attribute('pa_pw');
          // Return the value of the "pa_pw" attribute
          return $pa_pw;
          // Break the loop
          break;
      }
  }
}

function get_product_permalink_by_email( $email ) {
  // Get all products
  $products = wc_get_products( array(
      'limit' => -1,
      'status' => 'publish', 
  ) );

  // Loop through the products
  foreach ( $products as $product ) {
      // Get the value of the "pa_e-mail" attribute
      $pa_email = $product->get_attribute('pa_e-mail');
      // Check if the "pa_e-mail" attribute matches the email
      if ( $pa_email == $email ) {
          $permalink = $product->get_permalink();
          // Return the permalink
          return $permalink;
          // Break the loop
          break;
      }
  }
}

add_filter( 'gform_field_value_edit_link', 'my_custom_population_function1' );
function my_custom_population_function1($value) {
  if ( rgpost( 'is_submit_6') ) {
    // Form has been submitted, so retrieve the values from the database
    
    // get mail address from gf field
    $email = rgar($entry, '4');
    
    // Permalink
    $link = get_product_permalink_by_email($email);
    
    // Output the value of $link to the PHP error log
    error_log( 'edit_link: ' . $link );
    
    return $link;
  } else {
    // Form has not been submitted, so return an empty value
    return '';
  }
}

add_filter( 'gform_field_value_edit_pw', 'my_custom_population_function2' );
function my_custom_population_function2($value) {
  if ( rgpost( 'is_submit_6') ) {
    // Form has been submitted, so retrieve the values from the database
    
    // get mail address from gf field
    $email = rgar($entry, '4');
    
    // Password
    $password = get_pw_by_email($email);
    
    // Output the value of $password to the PHP error log
    error_log( 'edit_pw: ' . $password );
    
    return $password;
  } else {
    // Form has not been submitted, so return an empty value
    return '';
  }
}

Aber die E-Mails, die ich erhalte, haben nur Nullwerte, bei denen {Link:6} und {Passwort:7} angezeigt werden sollen.

P粉447495069
P粉447495069

Antworte allen(2)
P粉262113569

我重新编写了代码。

function get_product_permalink_by_email($email) {

  $products = get_posts(array('post_type' = >'product', 'tax_query' = >array(array('taxonomy' = >'pa_e-mail', 'field' = >'name', 'terms' = >$email))));

  if (empty($products)) {
    return '';
  }

  return get_permalink($products[0] - >ID);
}

function get_pw_by_email($email) {

  $products = get_posts(array('post_type' = >'product', 'tax_query' = >array(array('taxonomy' = >'pa_e-mail', 'field' = >'name', 'terms' = >$email))));

  $terms = wp_get_post_terms($products[0] - >ID, 'pa_pw', true);
  if (empty($terms)) {
    return '';
  }

  return $terms[0] - >name;
}

add_filter('gform_field_value_edit_link', 'my_custom_population_function1');
function my_custom_population_function1($value, $entry) {
  // Form has been submitted, so retrieve the values from the database

  // get mail address from gf field
  $email = rgar($entry, '4');

  // Permalink
  $link = get_product_permalink_by_email($email);

  // Output the value of $link to the PHP error log
  error_log('edit_link: '.$link);

  return $link;
}

add_filter('gform_field_value_edit_pw', 'my_custom_population_function2');
function my_custom_population_function2($value, $entry) {
  // Form has been submitted, so retrieve the values from the database

  // get mail address from gf field
  $email = rgar($entry, '4');

  // Password
  $password = get_pw_by_email($email);

  // Output the value of $password to the PHP error log
  error_log('edit_pw: '.$password);

  return $password;

}

而且我非常确定,正是这一行导致了“错误”:

$email = rgar($entry, '4');

如果我手动输入邮件地址作为 $email,那么它会按预期工作。 因此,Gravity Forms 一定存在某些问题,没有传递电子邮件输入文本字段(ID 4)的值。

有什么提示吗?

P粉841870942

我终于开始工作了! 我的问题是,我的电子邮件字段 (ID4) 的值无法在“gform_field_value_”过滤器的 $enrtry 变量中访问。

这是我的工作代码:

function get_product_permalink_by_email($email) {

  $products = get_posts(array('post_type' =>'product', 'tax_query' =>array(array('taxonomy' =>'pa_e-mail', 'field' =>'name', 'terms' =>$email))));

  if (empty($products)) {
    return '';
  }

  return get_permalink($products[0] ->ID);
}

function get_pw_by_email($email) {

  $products = get_posts(array('post_type' =>'product', 'tax_query' =>array(array('taxonomy' =>'pa_e-mail', 'field' =>'name', 'terms' =>$email))));

  $terms = wp_get_post_terms($products[0] ->ID, 'pa_pw', true);
  if (empty($terms)) {
    return '';
  }

  return $terms[0]->name;
}

add_action( 'gform_pre_submission_7', 'pre_submission' );
function pre_submission( $entry, $form ) {
    
    $entry_id = $entry['id'];
    
    global $email;
    $email = $_POST['input_2'];
    
    $edit_link = get_product_permalink_by_email( $email );
    if ( $edit_link ) {
        $edit_link .= 'edit';
    }
    $edit_pw = get_pw_by_email( $email );

    $_POST['input_3'] = $edit_link;
    $_POST['input_4'] = $edit_pw;

}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage