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

13

Estou aprendendo sobre plugins e códigos de acesso. Percebi que quando eu ativo meu plugin, seu código é carregado em todas as minhas páginas, mesmo páginas que não têm meu shortcode. (Não estou falando de páginas de conteúdo versus admin). Em algumas páginas de conteúdo, eu uso um shortcode específico e em outras páginas de conteúdo, eu não - mas em qualquer caso, o código do plugin é 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 tenha um plug-in que crie uma lightbox. Eu ativo o plugin. Na minha página "Cool Images", eu uso shortcode para fazer um lightbox. Quando eu verifico o View Source na minha página "About", que não usa o shortcode do lightbox, vejo que o código do plugin do lightbox foi carregado. Minhas páginas serão carregadas mais rapidamente se eu escrever meu plugin para que seu código seja carregado apenas nas páginas onde for necessário. Isso é possível? Caso contrário, terei código para muitos plugins carregados nas páginas desnecessariamente. Alguma idéia?

    
por Laxmidi 08.01.2012 / 18:23

6 respostas

8

O WP v3.3 nos deu a capacidade de 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 só será incluído quando o nosso shortcode for disparado.

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' );
    
por Dave Romsey 25.01.2012 / 08:02
2

Verifique as variáveis de interface de administração com o administrador

Um item de menu é um caso especial: Comentários, conforme 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-consitentes e codificados no núcleo do wp. Note que nem todos estão definidos em todas as páginas.

Conecte-se aos ganchos da interface administrativa do administrador da página

Depois, também há ganchos especiais específicos da página, que você pode ver em admin-footer.php e 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: Post Screen

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

Em seguida, há também o $hook_suffix que você pode verificar em busca de scripts de enfileiramento, quando estiver enganchando sua ação:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Atualizar

Para facilitar o acesso (1 clique) a esses dados / informações, criamos um plug-in de desenvolvedor disponível gratuitamente chamado "(WCM) Current Admin Info" , disponível em GitHub . O plugin pode ser encontrado em um futuro próximo no repositório oficial do wp.org . / p>

Capturas de tela

Para visualizar o que você recebe com este plug-in:

    
por kaiser 09.01.2012 / 02:06
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 a carga atual é de página ou postagem e, em seguida, captura conteúdo e pesquisa seu código de acesso. Ao encontrá-lo, ele executa sua função.

    
por Noel Tock 08.01.2012 / 19:28
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');
    
por matchdav 09.01.2012 / 20:17
0

@kaiser observou get_shortcode_regex() várias vezes neste tópico, eu apenas pensei em dar um exemplo sobre como usá-lo. O código é praticamente retirado da página de referência do código get_shortcode_regex() 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' );
    
por Nicolai 03.03.2016 / 17:15
-3

Eu encontrei esta solução :

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

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}
    
por Laxmidi 25.01.2012 / 07:06