Heim > Fragen und Antworten > Hauptteil
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粉2621135692024-03-30 19:40:11
我重新编写了代码。
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粉8418709422024-03-30 16:19:09
我终于开始工作了! 我的问题是,我的电子邮件字段 (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; }