ti-enxame.com

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

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. (Eu não quero dizer 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 plugin seja incluído apenas nas páginas onde o shortcode é usado?

Mais detalhes:

Vamos dizer que eu tenho um plugin que faz uma mesa de luz. 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 rápido se eu escrever meu plugin para que seu código seja carregado apenas nas páginas onde é necessário. Isso é possível? Caso contrário, eu terei código para muitos plugins carregados em páginas desnecessariamente. Alguma ideia?

14
Laxmidi

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' );
8
Dave Romsey

Verificar as variáveis ​​da interface do administrador

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

// 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

Em seguida, há também 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

Depois, 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 amigável disponível para o desenvolvedor chamado "(WCM) Current Admin Info" , que está disponível em GitHub . O plugin pode ser encontrado em um futuro próximo no repositório official wp.org .

Capturas de tela

Para dar uma prévia do que você obtém com este plug-in:

Screen

Hooks

Globals

2
kaiser

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, então pega o conteúdo e procura seu código de acesso. Ao encontrá-lo, ele executa sua função.

0
Noel Tock

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');
0
matchdav

@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 página get_shortcode_regex() WordPress Code Reference.

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' );
0
Nicolai