Подключаемые функции WordPress
Вы когда-нибудь слышали о подключаемых функциях WordPress? Если нет, то эта статья должна привлечь ваше внимание. В двух словах подключаемые функции — это основные функции WordPress, которые вы можете переопределить. Все эти функции расположены в одном файле: «wp-includes/pluggable.php». Подключаемые функции были представлены в WordPress 1.5.1, но в последних версиях WordPress этот метод больше не используется. Последние функции теперь используют фильтры на своем выходе. Но вы все равно можете переопределить подключаемые функции, и именно об этом я хотел бы рассказать в этом посте.
Какие функции?
Подключаемые функции:
- auth_redirect
- check_admin_referer
- check_ajax_referer
- get_avatar
- get_currentuserinfo
- get_user_by_email
- get_user_by
- get_userdatabylogin
- get_userdata
- is_user_logged_in
- wp_authenticate
- wp_check_password
- wp_clear_auth_cookie
- wp_create_nonce
- wp_generate_auth_cookie
- wp_generate_password
- wp_get_current_user
- wp_hash_password
- wp_hash
- wp_logout
- wp_mail
- wp_new_user_notification
- wp_nonce_tick
- wp_notify_moderator
- wp_notify_postauthor
- wp_parse_auth_cookie
- wp_password_change_notification
- wp_rand
- wp_redirect
- wp_safe_redirect
- wp_salt
- wp_sanitize_redirect
- wp_set_auth_cookie
- wp_set_current_user
- wp_set_password
- wp_text_diff
- wp_validate_auth_cookie
- wp_validate_redirect
- wp_verify_nonce
Вы можете нажать на имя каждой функции, чтобы получить доступ к ее странице кодекса.
Как переопределить подключаемые функции
Что ж, это довольно просто, все, что вам нужно сделать, это создать в ваших плагинах файл, содержащий оператор «if ( !function_exists() )…», а затем переопределить функцию. Я настоятельно рекомендую вам скопировать и вставить исходную функцию при запуске. Так вы будете уверены, что функция будет работать. Вот пустой пример:
if ( ! function_exists('wp_notify_postauthor') ) :
/**
* Notify an author of a comment/trackback/pingback to one of their posts.
*
* @since 1.0.0
*
* @param int $comment_id Comment ID
* @param string $comment_type Optional. The comment type either 'comment' (default), 'trackback', or 'pingback'
* @return bool False if user email does not exist. True on completion.
*/
function wp_notify_postauthor( $comment_id, $comment_type = '' ) {
/* This is where you redefine the function */
}
endif;
Я хотел бы поговорить о функции «wp_notify_postauthor()». Он отвечает за отправку электронного письма авторам сообщений при добавлении нового комментария. В одном из моих плагинов, WordPress Issues Manager, мне нужно было отключить это уведомление, но только для определенного типа сообщений. Итак, я скопировал всю функцию и просто добавил это:
if ( ! function_exists('wp_notify_postauthor') ) :
/**
* Notify an author of a comment/trackback/pingback to one of their posts.
*
* @since 1.0.0
*
* @param int $comment_id Comment ID
* @param string $comment_type Optional. The comment type either 'comment' (default), 'trackback', or 'pingback'
* @return bool False if user email does not exist. True on completion.
*/
function wp_notify_postauthor( $comment_id, $comment_type = '' ) {
if( $post->post_type != 'issue'):
/* content of the original function */
endif;
}
endif;
Это просто, но это прекрасно работает без необходимости вносить огромные изменения или создавать полноценную пользовательскую функцию, привязанную к пользовательскому действию.
wp_mail()
Как вы видели в списке подключаемых функций, wp_mail() — это подключаемая функция. Эта функция используется для отправки электронных писем. В любом месте WordPress при отправке электронного письма используется эта функция. Вот почему его настройка может быть очень интересной. Например, вы можете использовать шаблон HTML по умолчанию для всех писем, отправляемых при установке WordPress.
Вы также можете отправить скрытую копию каждого сообщения на определенный адрес электронной почты, чтобы иметь своего рода резервную копию (поверьте мне, это может быть полезно, когда кто-то говорит вам, что он не получил сообщение!).
wp_authenticate()
Вы также можете изменить wp_authenticate() и добавить некоторые дополнительные параметры для обеспечения безопасности на вашем сайте (например, атаки методом перебора).
auth_redirect()
Эта функция проверяет, вошел ли пользователь в систему, и если нет, то перенаправляет его на страницу входа. Было бы довольно легко переопределить эту функцию и перенаправить пользователя на пользовательскую страницу вместо страницы входа по умолчанию (например, если вы хотите скрыть папку wp-admin).
wp_generate_password()
Эта функция автоматически генерирует пароли. Честно говоря, вам не нужно его модифицировать, но теперь, когда вы знаете, что такое атаки методом перебора, вы можете быть заинтересованы в создании более надежных паролей. Ну, это функция для улучшения.
Заключение
В заключение этого короткого поста о подключаемых функциях WordPress я хотел бы отметить тот факт, что новые функции больше не работают таким образом. Как я писал выше, они сейчас используют фильтры. Но подключаемые функции являются важными функциями, особенно при создании действительно конкретных плагинов. Но будьте осторожны при использовании подключаемых функций. Если вновь созданная функция не работает идеально, она может сломать часть вашего сайта (с точки зрения функциональности), поэтому, пожалуйста, протестируйте их во всех условиях.