Пожалуйста, помогите мне в этом примере с фильтром, чтобы понять, как они работают

Я ищу эту функцию генерации пароля:

function wp_generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; if ( $special_chars ) $chars .= '!@#$%^&*()'; if ( $extra_special_chars ) $chars .= '-_ []{}<>~`+=,.;:/?|'; $password = ''; for ( $i = 0; $i < $length; $i++ ) { $password .= substr($chars, wp_rand(0, strlen($chars) - 1), 1); } // random_password filter was previously in random_password function which was deprecated return apply_filters('random_password', $password); } 

То, что я пытаюсь понять, это часть apply_filters. Правильно ли я это делаю, это вернуть random_password ($ password)? Где random_password – функция фильтра? Но я не могу найти random_password, определенный в любом из исходных файлов?

Правильно ли я думаю, если исходный код не может найти random_password (), он возвращает $ password, и если он может найти random_password (), определенный где-то, он возвращает random_password ($ password)? Если да, то где в исходном коде я определяю random_password ()?

благодаря

Solutions Collecting From Web of "Пожалуйста, помогите мне в этом примере с фильтром, чтобы понять, как они работают"

Чтобы полностью понять, как работает WP, вам нужно понять, что WP – платформа, управляемая событиями (хотя это свободный термин, но я думаю, что это помогает лучше понять). Вам нужно подумать, какое именно событие происходит сейчас.

В этом случае создается пароль.

Следующий вопрос: как вы можете изменить это, сгенерировали ваш желаемый путь. WP предоставил random_password фильтра с именем random_password с apply_filters а также предоставил сгенерированный пароль для вас (см. Раздел « Разница между фильтром и Action Hooks?» ).

Вы определяете функцию, используемую для изменения пароля с помощью add_filter .

Прошу вас сначала прочитать документацию

  • apply_filters
  • add_filter

Вернемся к вашему примеру. Я также приглашаю вас ознакомиться с документацией

  • wp_generate_password

Кодекс говорит

Он генерирует случайный пароль, набранный из определенного набора символов.

Теперь скажите, вы хотите создать плагин, который изменит способ создания пароля.

Вы не можете (никоим образом не захотите) изменить код основных файлов WP. Но вам нужно это сделать. WordPress предоставил вам возможность изменить его с помощью filter hook .

Функция apply_filter создает фильтр в этом случае с именем random_password . Итак, теперь у вас есть возможность изменить сгенерированный пароль, поскольку пароль также отправляется в качестве аргумента.

Таким образом, random_password не является функцией, это фильтр, с помощью которого вы можете фильтровать WP сгенерированный пароль по вашему желанию.

Теперь, возвращаясь к вашему желанию изменить автоматически сгенерированный пароль, вы используете фильтр следующим образом:

 add_filter('random_password', 'my_generated_password'); 

В этом случае каждое событие генерации / вызова wp_generate_password также вызывает функцию my_generated_password которую вы определяете, и она передаст $password качестве аргумента.

Для демонстрационной цели, допустим, вы хотите добавить дополнительный символ L к сгенерированному паролю. В этом случае вы определите функцию следующим образом:

 function my_generated_password($password){ return ($password . 'L'); } 

random_password – это просто имя для события, а не функция.

Вы можете зарегистрировать обратный вызов (метод или метод класса) для этого имени:

 add_filter( 'random_password', 'foo' ); 

Здесь foo должна быть уже определенной вами функцией:

 function foo( $password ) { return 'bar'; } 

Смотрите также:

  • Как фильтры и перехватчики действительно работают в PHP
  • Объяснение функции apply_filters и его переменных