Restringindo um plug-in para carregar apenas CSS e JS nas páginas selecionadas?


9

Gostaria de fazer com que um plug-in restringisse o carregamento de folhas de estilo CSS e arquivos JS JavaScript para apenas as páginas para as quais eles são necessários.

Um exemplo para minha pergunta é o plug-in Formulário de contato 7, que eu usei para criar um formulário em uma página do meu site (a página " entre em contato comigo "). No entanto, ele adiciona as seguintes linhas a TODAS as páginas / postagens no site:

<link rel='stylesheet' id='contact-form-7-css'  href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' /> 

<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script> 

Isso me faz suspeitar que esse plug-in está prejudicando o tempo de carregamento do meu site, para uma extensão que me interessa em apenas uma página do site.

Portanto, minha pergunta é como posso remover essas linhas extras de todas as páginas, exceto a página "Entre em contato comigo", mas sem desativar o plug-in?

Respostas:


9

Estilos e scripts são sempre configurados pelas funções wp_enqueue_script()e wp_enqueue_style(), que precisam ser vinculados a um gancho de ação específico para funcionar. Dei uma olhada no Formulário de contato 7 e parece que ele está usando tags de ação wpcf7_enqueue_scriptse wpcf7_enqueue_stylespara adicioná-los aos ganchos wp_print_scriptse wp_print_styles.

Portanto, o que você precisa fazer é desanexar os scripts e estilos de todas as páginas, menos da sua página de contato. A wp_headação é acionada antes do script e estiliza as ações, portanto, você precisará adicionar algo assim ao arquivo functions.php do seu tema:

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

A função is_page () retornará truequando você estiver na página de contato (assumindo que o nome seja "entre em contato comigo") ... você também poderá usar o slug da página e o ID da página para o filtro. Em todas as outras páginas, o if()condicional adicionará a função de remoção de script / estilo à wp_headação, que é acionada imediatamente antes das ações wp_print_scriptse wp_print_styles.

Isso deve remover o código extra de suas páginas e você não precisará desativar o plug-in ou editar nenhum arquivo principal. As funções e o código que listei acima também não farão com que o seu tema seja interrompido se você remover o Formulário de contato 7 no futuro também ... portanto, não é necessário se preocupar com a compatibilidade futura de atualizações.


Olá EAMann. Ótima solução - obrigado! Você acha que esse método pode ser envolvido em um plug-in que verifica quais ganchos são usados ​​e permite que alguém os desative de acordo com o local da página?
precisa saber é o seguinte

Infelizmente, existem muitos ganchos usados ​​dinamicamente no WordPress. Portanto, você não pode detectar com segurança quais ganchos estão sendo usados ​​... mas provavelmente poderá capturar a maioria deles dessa maneira.
EAMann

Legal. você acabou de me dar uma idéia para uma nova pergunta: wordpress.stackexchange.com/questions/698/…
Tal Galili

Só para você saber, você também me deu a idéia de começar a desenvolver este plug-in :-)
EAMann

3
@EAMann e @Tal Galili - Na verdade, você pode capturar todos os ganchos, mesmo os mais dinâmicos usando o allgancho, ver wordpress.stackexchange.com/questions/307
MikeSchinkel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.