Pergunta

Eu quero o meu plugin para registar um script apenas em uma determinada página.

Por exemplo, dentro do meu arquivo de plugin quero escrever algo como isto:

if (is_page()) {
    $pageid_current = get_the_ID();
    $page_slug = get_post($pageid_current)->post_name;

    if ($page_slug == 'articles'){
        wp_register_script('myscript', '/someurl/main.js');
    }
}

Mas recebo a mensagem de erro:

is_page foi chamado incorretamente.Condicional consulta tags não funcionam antes que a consulta é executada.Antes disso, eles sempre retornará false.Por favor consulte a Depuração em WordPress para obter mais informações.(Esta mensagem foi adicionado na versão 3.1.)

Como posso eu, dentro de um plugin, registar um script em uma determinada página?

Foi útil?

Solução

is_page() só funcionam dentro de arquivos de modelo.

E usá-lo dentro de arquivos do plugin, você precisa usá-lo com a combinação de template_redirect ação de gancho.

Esta ação gancho executado antes de WordPress determina qual o modelo de página para carregar.

Assim trecho a seguir irá funcionar:

add_action( 'template_redirect', 'plugin_is_page' );

function plugin_is_page() {
    if ( is_page( 'articles' ) ) {
        wp_register_script( 'my-js-handler', '/someurl/main.js', [], '1.0.0', true );
    }
}

Outras dicas

Você poderia usar is_page() após o modelo de redirecionamento, de modo que você precisa adicionar o gancho, como este :

add_action('template_redirect','your_function');
function your_function(){
 if ( is_page('test') ) {
  // do you thing.
 }
}

Você deve registar seu script como se você deseja trabalhar em qualquer lugar.Você pode registrá-lo depois que o trabalho é feito, como este:

function deregister_my_script() {
    if (!is_page('page-d-exemple') ) {
        wp_deregister_script( 'custom-script-1' );
    }
}
add_action('wp_print_scripts', 'deregister_my_script', 100 );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top