Como incluir código apenas em páginas específicas?

14

Estou aprendendo sobre plugins e códigos de acesso. Percebi que quando eu ativo meu plug-in, seu código é carregado em todas as minhas páginas - mesmo nas páginas que não têm meu código de acesso. (Não estou falando de conteúdo x páginas de administrador). Em algumas páginas de conteúdo, eu uso um código de acesso específico e em outras páginas de conteúdo, não - mas, de qualquer forma, o código do plug-in é carregado. Como faço para que o plug-in seja incluído apenas nas páginas em que o shortcode é usado?

Mais detalhes:

Digamos que eu tenho um plugin que cria uma mesa de luz. Eu ativo o plugin. Na minha página "Imagens legais", uso shortcode para criar uma mesa de luz. Quando verifico Ver código-fonte na minha página "Sobre", que não usa o código de acesso da caixa de luz, vejo que o código do plugin da caixa de luz foi carregado. Minhas páginas serão carregadas mais rapidamente se eu escrever meu plug-in para que seu código seja carregado apenas nas páginas onde for necessário. Isso é possível? Caso contrário, terei o código para muitos plugins carregados nas páginas desnecessariamente. Alguma ideia?

Laxmidi
fonte
1
Você está tentando enfileirar alguma coisa ou tentando executar um script PHP em páginas que possuem o código curto?
mor7ifer
+1 @ m0r7if3r - Eu também gostaria de entender que ..A aproxima seria muito diferente
krembo99
@ mrOr7if3r, Obrigado pela mensagem. Por exemplo, digamos que eu tenho um plug-in do Google Maps. Esse plugin precisa ser carregado em todas as páginas - ou seja, páginas que não usam o plugin? Digamos que eu tenha uma página "Sobre" que não contenha o código de acesso do Google Maps. Se eu olhar para Ver código-fonte, vejo que o código do plug-in foi carregado nessa página (evento que não estou usando). O código para plug-ins precisa carregar em todas as páginas? Obrigado.
Laxmidi 9/01/12
Boa pergunta que imho leva a (novas) melhores práticas, pois o WP agora nos permite enfileirar scripts a qualquer momento.
Raphael

Respostas:

9

O WP v3.3 nos permitiu executar o wp_enqueue_script no meio de uma página. Bilhete 9346

Isso tornou muito mais fácil incluir seu JS com melhor granularidade (ao usar códigos de acesso, pelo menos). Aqui, o jquery será incluído apenas quando nosso código de acesso for acionado.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );
Dave Romsey
fonte
1
É assim que deve ser feito, imo.
Raphael
1
Excelente, eu não tinha percebido que agora era possível executar o wp_enqueue_script no meio de uma página. Uma maneira muito mais limpa de carregar apenas scripts / css quando necessário!
Rick Curran
2

Verifique as variáveis ​​da UI do administrador

Um item de menu é um caso especial: Comentários, à medida que são registrados usando a add_WHATEVER_(submenu)page()API.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

Estes são não consistentes e codificados no núcleo do wp. Observe que nem todos estão definidos em todas as páginas.

Conecte-se aos ganchos de interface do usuário de administrador específicos da página

Também há ganchos especiais específicos da página, que você pode ver admin-footer.phpe admin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

Alguns exemplos no mundo real: Tela de postagem

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

Depois, há também o $hook_suffixque você pode verificar para obter scripts de enfileiramento, exatamente quando você está conectando sua ação:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Atualizar

Para obter um acesso mais fácil (com um clique) a esses dados / informações, criamos um plug-in disponível gratuitamente para desenvolvedores, chamado "(WCM) Current Admin Info" , disponível no GitHub . O plugin também pode ser encontrado no futuro próximo no repositório oficial do wp.org .

Capturas de tela

Para dar uma prévia do que você obtém com este plugin:

Tela

Hooks

Globals

kaiser
fonte
0

Poderia fazer algo ao longo das linhas de (no header.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

Verifica se o carregamento atual é página ou postagem e, em seguida, captura o conteúdo e pesquisa seu código de acesso. Ao encontrá-lo, ele executa sua função.

Noel Tock
fonte
Obrigado pela sua mensagem. Tentei usar sua solução, mas, infelizmente, não consegui fazê-la funcionar.
Laxmidi
Foi adicionado ao cabeçalho?
Noel Tock
1
Você já viu get_shortcode_regex()?
Kaiser
0

A maneira mais simples é apenas verificar o código de acesso.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');
matchdav
fonte
1
get_shortcode_regex()para isso.
Kaiser
0

@ Kaiser observou get_shortcode_regex()várias vezes neste tópico, eu apenas pensei em dar um exemplo de como usá-lo. O código é praticamente retirado da get_shortcode_regex()página de referência de código do WordPress.

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );
Nicolai
fonte
-3

Encontrei esta solução :

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
Laxmidi
fonte
3
Mas lhe soluções irá remover scripts a partir de todas as páginas
Mamaduka