¿Cómo puedo usar IS_PAGE () dentro de un complemento?
-
23-12-2019 - |
Pregunta
Quiero que mi plugin registre un script solo en una página determinada.
Por ejemplo, dentro de mi archivo de complemento quiero escribir algo como este:
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');
}
}
pero recibo el error:
is_page se llamó incorrectamente.Las etiquetas de consulta condicionales no funcionan Antes de correr la consulta.Antes de eso, siempre vuelven falsos.Por favor Consulte la depuración en WordPress para obtener más información.(Este mensaje fue añadido en la versión 3.1.)
¿Cómo puedo, dentro de un plugin, registrar un script en una página determinada?
Solución
is_page()
solo trabaja dentro de los archivos de plantilla.
y para usarlo dentro de los archivos de plugin, debe usarlo con la combinación de template_redirect
gancho de acción.
Este gancho de acción se ejecuta justo antes de que WordPress determine qué página de plantilla se cargue.
Así que siguiendo el fragmento funcionaría:
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 );
}
}
Otros consejos
Podría usar is_page()
después de la redirección de la plantilla para que necesite agregar el gancho como este:
add_action('template_redirect','your_function');
function your_function(){
if ( is_page('test') ) {
// do you thing.
}
}
Usted debe registrarse su script como si lo desee que funcione en todas partes. Puede desedregar después de que se realice el trabajo, 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 );