How can I use is_page() inside a plugin?

时间秒杀一切 提交于 2019-11-30 09:02:44

问题


I want my plugin to register a script only in a certain page.

For example, inside my plugin file I want to write something like this:

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');
    }
}

But I get the error:

is_page was called incorrectly. Conditional query tags do not work before the query is run. Before then, they always return false. Please see Debugging in WordPress for more information. (This message was added in version 3.1.)

How can I, inside of a plugin, register a script in a certain page?


回答1:


is_page() only work within template files.

And to use it within plugin files, you need to use it with the combination of template_redirect action hook.

This action hook executes just before WordPress determines which template page to load.

So following snippet would work:

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 );
    }
}



回答2:


You could use is_page() after template redirect so you need to add in the hook like this :

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



回答3:


You must register your script as if you want it to work everywhere. You can de-register it after the job is done, like this:

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 );


来源:https://stackoverflow.com/questions/22070223/how-can-i-use-is-page-inside-a-plugin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!