Gravity Forms должны извлекать некоторые данные из mysql

Я пытаюсь сделать какую-то функцию восстановления пароля (не спрашивайте, зачем).

У меня есть сайт WordPress, и я использую Gravity Forms, чтобы запросить почтовый адрес клиента. Затем я хочу использовать этот адрес, чтобы найти соответствующий продукт woo-commerce, у которого тот же адрес электронной почты добавлен в качестве пользовательского атрибута (pa_e-mail). Затем я хочу использовать другой атрибут, который содержит пароль (нет необходимости в сверхнадежной безопасности, md5, хэшах и т. д.) в качестве пользовательского атрибута (pa_pw) и отправить этот пароль обратно в Gravity Forms, чтобы отправить его по почте пользователю. . Кроме того, я хочу отправить ссылку на этот продукт, используя постоянную ссылку.

Код, который у меня есть до сих пор, находится внутри functions.php, а в Gravity Forms у меня есть два текстовых поля, которые могут получать динамическое заполнение. (edit_pw и 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 '';
  }
}

Но почта, которую я получаю, просто имеет пустые значения, где я хочу, чтобы {Link: 6} и {Password: 7} отображались.

Извините, я знаю, вы говорите, что это не имеет значения, но «нет необходимости в сверхнадежной защите» плюс слово «пароль» несовместимы. Вам все равно, это ваше право, а мне (пользователю вашего сайта) все равно. У подавляющего большинства пользователей плохие пароли, которые они используют везде. Небезопасно храня пароль, вы только что потенциально могли украсть чужой банковский пароль или пароль электронной почты. Позор пользователю за это, правда. Но исправление тривиально с вашей стороны. Единственное исключение может быть, если вы генерируете пароль случайным образом и не позволяете пользователям изменять его.

Chris Haas 06.01.2023 19:56

Да, пароль сгенерирован и задан заранее

user20947428 06.01.2023 20:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я переписал код.

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).

Кто-нибудь подскажет?

Что если вы замените $email = rgar($entry,'4'); со следующим:

if (GFAPI::entry_exists($entry) == true){
  $get_entry = GFAPI::get_entry($entry);
  $email = $get_entry['4'];
}

Нет, тот же результат. Может быть, ввод из этого поля не готов в данный момент времени? Какая-то проблема курицы и яйца.

user20947428 09.01.2023 08:36
Ответ принят как подходящий

Наконец-то я заработал! Моя проблема заключалась в том, что значение моего поля электронной почты (ID4) не было доступно в переменной $ enrtry моих фильтров «gform_field_value_».

Вот мой рабочий код:

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;

}

Другие вопросы по теме