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?
When you register a plugin option page you get a hook from the registration function:
Use this hook to enqueue the scripts and styles:
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.After further research, @fuxia has the best answer, even when using Redux Framework for an admin menu. When using Redux,
$hook
will betoplevel_page_
concatenated with the value you entered inpage_slug
in theoptions-init.php
file.For example:
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
Here is one scenario you might want to take care of!
Now you want to load your scripts and styles for those pages only!
How can you do that?
Solution:
reason you want to wrap the enqueue functions inside true condition is that, for multiple pages, your if condition will be always true and scripts will be never enqueued. See the example below:
This is a simple situation but for some reason, I was confused for a while.
I hope this helps anyone!
myplugin in ($_GET[‘page’]) === ‘myplugin’) is the value you set as 4th parameter ($menu_slug) when you add an admin page to your plugin via add_menu_page() function.
And plugin_dir_url(FILE) is relative to the page you add this code, if you want to use relative to root of your plugin folder, define a constant like
and use
in any subfolder file you add to your plugin instead of