Проблема с генерацией случайной строки и сохранением в пользовательском метаполе в WordPress - PullRequest
0 голосов
/ 20 июня 2019

Код должен создать случайную строку цифр и букв и добавить это как мета-поле пользователя WordPress.Этот код приводит к тому, что раздел «Добавление пользователя» выводит ошибки, такие как:

Fatal error: Uncaught `ArgumentCountError`: Too few arguments to function `myplugin_registration_save()`, 
1 passed in <path>/class-wp-hook.php on line 286 and exactly 2 expected in <path>/functions.php:347 
Stack trace: 
    #0 <path>/wp-includes/class-wp-hook.php(286): myplugin_registration_save(51) 
    #1 <path>/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(NULL, Array) 
    #2 <path>/plugin.php(465): WP_Hook->do_action(Array) 
    #3 <path>/user.php(1857): do_action('user_register', 51) 
    #4 <path>/user.php(226): wp_insert_user(Array) 
    #5 <path>/user-new.php(148): edit_user() 
    #6 {main} thrown in <path>/functions.php on line 347

Код:

function generateRandomString($length = 30) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

add_action('user_register', 'myplugin_registration_save', 10, 1 );
function myplugin_registration_save($user_id , $length) {
    $meta_key = "pkg_autologin_code";
    $timestampz=time();
    $tokenparta = generateRandomString();
    $key = $timestampz*3 . $tokenparta;
    update_user_meta($user_id, $meta_key , $key);
    }

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Если вы посмотрите документацию для функции add_action(), вы увидите, что четвертый аргумент - int $accepted_args.

Вы должны изменить 1на 2 на ваш add_action() звонок.Поэтому измените эту строку:

add_action('user_register', 'myplugin_registration_save', 10, 1 );

на

add_action('user_register', 'myplugin_registration_save', 10, 2 );
0 голосов
/ 20 июня 2019

Я отредактировал удаление $ lenght из функциональной строки:

   function generateRandomString($length = 30) {
          $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
          $charactersLength = strlen($characters);
          $randomString = '';
          for ($i = 0; $i < $length; $i++) {
          $randomString .= $characters[rand(0, $charactersLength - 1)];
          }
   return $randomString;
   }
   add_action('user_register', 'myplugin_registration_save', 10, 2);
   function myplugin_registration_save($user_id) {
          $meta_key = "pkg_autologin_code";
          $timestampz=time();
          $tokenparta = generateRandomString();
          $key = $timestampz*3 . $tokenparta;
          update_user_meta($user_id, "pkg_autologin_code", $key);
   }

Кажется, работает.

...