4

Hello wordpress users,

I'm stuck with a problem while running 2 self made Wordpress plugins. I'll use the following code :

define('PLUGIN_URL', plugin_dir_url( __FILE__ ));
add_action( 'admin_enqueue_scripts', 'plugin_load_js_and_css' );

function plugin_load_js_and_css() {
        wp_register_style( 'plugin.css', PLUGIN_URL . 'plugin.css', array());
        wp_enqueue_style( 'plugin.css');

        wp_register_script( 'plugin.js', PLUGIN_URL . 'plugin.js', array('jquery'));
        wp_enqueue_script( 'plugin.js' );
    }
}

But it's loading this stylesheet everywhere in the admin panel. Now I found this in the codex:

function my_enqueue($hook) {
    if( 'edit.php' != $hook )
        return;
    wp_enqueue_script( 'my_custom_script', plugins_url('/myscript.js', __FILE__) );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );

But this code is not working for my.. Does anyone have a another option? Or maybe know why it's not working for me?

  • And where your plugin runs? Does it have a custom page? Show the code for this part. – brasofilo Mar 29 '13 at 17:34
  • Nor working doesn't really tell us anything. Is the script loading on edit.php? – Chris_O Mar 29 '13 at 17:35
8

When you register a plugin option page you get a hook from the registration function:

$hook = add_menu_page(
    'T5 Demo',        // page title
    'T5 Demo',        // menu title
    'manage_options', // capability
    't5-demo',        // menu slug
    'my_render_page'  // callback function
);

Use this hook to enqueue the scripts and styles:

add_action( "admin_print_styles-$hook", "my_enqueue_style" );
add_action( "admin_print_scripts-$hook", "my_enqueue_script" );

See my plugin T5 Admin Menu Demo for an example.

Do not define a constant PLUGIN_URL. You will run into collisions with other code.

  • I literally had to search uid 73 to find this damn answer I've been searching for an hour. – Christine Cooper Dec 27 '14 at 21:48
0

After further research, @fuxia has the best answer, even when using Redux Framework for an admin menu. When using Redux, $hook will be toplevel_page_ concatenated with the value you entered in page_slug in the options-init.php file.

For example:

$opt_name = my_option

'page_slug' => $opt_name.'_settings'

add_action( "admin_print_styles-**toplevel_page_my_option_settings**", "my_enqueue_style" );
add_action( "admin_print_scripts-**toplevel_page_my_option_settings**", "my_enqueue_script" );

Also, if you don't remember what you set my_option to, just open your Redux admin panel and look at the URL, it should be:

yoursite/wp-admin/admin.php?page=**my_option_settings**&tab=1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.