Funções plugáveis do WordPress
Você já ouviu falar do WordPress Pluggable Functions ? Se não, então este artigo deve chamar sua atenção. Em duas palavras, as funções conectáveis são funções centrais do WordPress que você pode substituir. Todas essas funções estão localizadas em um único arquivo: “ wp-includes/pluggable.php “. As funções plugáveis foram introduzidas no WordPress 1.5.1, mas nas versões mais recentes do WordPress esse método não é mais usado. Funções recentes agora usam filtros em sua saída. Mas você ainda pode substituir funções conectáveis, e é isso que eu gostaria de abordar neste post.
Quais Funções?
As funções conectáveis são:
- 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
Você pode clicar no nome de cada função para acessar sua página de códice.
Como substituir funções conectáveis
Bem, isso é bem simples, tudo que você precisa fazer é criar um arquivo dentro de seus plugins contendo uma declaração “if ( !function_exists() )…” e então redefinir a função. Eu recomendo fortemente que você copie e cole a função original ao iniciar. Dessa forma, você tem certeza de que a função funcionará. Aqui está um exemplo vazio:
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;
Eu gostaria de falar sobre a função “wp_notify_postauthor()”. Este é o responsável por enviar um e-mail aos autores do post quando um novo comentário é adicionado. Em um dos meus plugins, o WordPress Issues Manager, precisei desabilitar essa notificação, mas apenas um tipo de postagem personalizado específico. Então, copiei toda a função e simplesmente adicionei isso:
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;
Isso é simples, mas funciona muito bem sem ter que fazer grandes alterações ou criar uma função personalizada completa vinculada a uma ação personalizada.
wp_mail()
Como você viu na lista de funções conectáveis, wp_mail() é uma função conectável. Esta função é a utilizada para enviar e-mails. Em qualquer lugar no WordPress, quando um email é enviado, ele usa essa função. É por isso que personalizá-lo pode ser muito interessante. Por exemplo, você pode usar um modelo padrão html para todos os e-mails enviados de sua instalação do WordPress.
Você também pode enviar uma cópia oculta de cada mensagem para um e-mail específico para ter um tipo de backup (confie em mim, isso pode ser útil quando alguém lhe disser que não recebeu a mensagem!).
wp_authenticate()
Você também pode modificar wp_authenticate() e adicionar alguns parâmetros extras para reforçar a segurança em seu site (ataques de força bruta, por exemplo).
auth_redirect()
Esta função é a que verifica se um usuário está logado e, caso não esteja, redireciona-o para a página de login. Seria muito fácil substituir a função e redirecionar o usuário para uma página personalizada, em vez da página de login padrão (por exemplo, se você deseja ocultar a pasta wp-admin).
wp_generate_password()
Esta função é a que gera automaticamente as senhas. Honestamente, você não precisa modificá-lo, mas agora que sabe o que são ataques de força bruta, pode estar interessado em criar senhas mais fortes. Bem, esta é a função para melhorar.
Conclusão
Para concluir este breve post sobre as funções plugáveis do WordPress, gostaria de salientar o fato de que novas funções não funcionam mais assim. Como escrevi acima, eles agora estão usando filtros. Mas as funções conectáveis são funções importantes em particular ao criar plugins realmente específicos. Mas tenha cuidado ao usar funções conectáveis. Se a função recém-criada não estiver funcionando perfeitamente, ela pode quebrar uma parte do seu site (em termos de funcionalidade), portanto, teste-a em todas as condições.