Currently I have successfully added a row of shortcode buttons to the TinyMCE editor in WordPress. The problem is, only admins can see the row, and I need contributors and editors to see it too. I have checked the Codex for add_action and add_filter and I can’t see any specific arguments to indicate user roles or anything like that. How can I modify this code so that all logged in users can see the new row instead of just admins? Here is the code I’m using to add the row to the editor window:
// add shortcode buttons to the tinyMCE editor row 3
function add_button_3() {
if ( current_user_can('edit_posts') && current_user_can('edit_pages') )
{
add_filter('mce_external_plugins', 'add_plugin_3');
add_filter('mce_buttons_3', 'register_button_3');
}
}
//setup array of shortcode buttons to add
function register_button_3($buttons) {
array_push($buttons, "dropcap", "divider", "quote", "pullquoteleft", "pullquoteright", "boxdark", "boxlight", "togglesimple", "togglebox", "tabs", "signoff", "columns", "smallbuttons", "largebuttons", "lists");
return $buttons;
}
//setup array for tinyMCE editor interface
function add_plugin_3($plugin_array) {
$plugin_array['lists'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['signoff'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['dropcap'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['divider'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['quote'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['pullquoteleft'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['pullquoteright'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['boxdark'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['boxlight'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['togglesimple'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['togglebox'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['tabs'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['columns'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['smallbuttons'] = get_template_directory_uri().'/js/customcodes.js';
$plugin_array['largebuttons'] = get_template_directory_uri().'/js/customcodes.js';
return $plugin_array;
}
add_action('init', 'add_button_3'); // add the add_button function to the page init
Your if statement wants the user to be able to posts AND pages, which only applies to admins and editors by default. Are you sure editors cannot see the buttons? If you want anybody who can edit posts to see the buttons (e.g. authors and contributors) take out the check for
edit_pages
or make it an or statement (which is an unlikely situation in most installs, but I suppose it could happen).So, instead of:
if ( current_user_can('edit_posts') && current_user_can('edit_pages') )
Use
if ( current_user_can('edit_posts') )
or
if ( current_user_can('edit_posts') || current_user_can('edit_pages') )
My solution would be to first try out the plugin TinyMCE Advanced instead – it is fantastic and give you very good control. Maybe I’m missing something but I have never felt the need to “roll my own”.