Como posso usar is_page() dentro de um plugin?
-
23-12-2019 - |
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?
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 );