I need to remove the link to the Jetpack settings, but not the links to Omnisearch and Site Stats from the admin menu for everyone not having an administrator role:

enter image description here

For this, I came up with this code:

function remove_posts_menu() {
    if (!current_user_can('administrator')) {
        remove_submenu_page('admin.php?page=jetpack', 'admin.php?page=jetpack');
add_action('admin_init', 'remove_posts_menu');

(Reference for the remove_submenu_page() function)

However, this doesn't work. I did check that the function is called and so by adding remove_submenu_page('tools.php', 'tools.php'); - when this is added to the function, just after the removal of the Jetpack settings link, the Tools link is removed, but the Broken Link Checker link (of a plugin I installed) is still visible.

What's the correct way to remove the Jetpack link?


Try this instead:

function remove_posts_menu() {
    if ( ! current_user_can( 'manage_options' ) ) 
        remove_submenu_page( 'jetpack', 'jetpack' );

add_action( 'admin_init', 'remove_posts_menu' );

where the menu slug and submenu slug are jetpack.

  • Although this works, I discovered it causes conflicts with other elements in the dashboard (e.g. you can't access the Media Library in the "Add Media" modal). I would suggest hooking in admin_menu instead. – jeherve Jul 7 '14 at 10:54

Jetpack's menu is added quite late, so you'll need to change the default priority to remove it a bit later (priority 999), like so:

function jetpackme_remove_jetpack_menu() {
        if ( ! current_user_can( 'manage_options' ) ) {
                remove_submenu_page( 'jetpack', 'jetpack' );
add_action ( 'admin_menu', 'jetpackme_remove_jetpack_menu', 999 );
function wpdocs_remove_menus(){
      remove_menu_page( 'jetpack' );
add_action( 'admin_init', 'wpdocs_remove_menus' );
//paste in functions.php removes menu item for admin users

For the people that never want to see jetpack again. The code above unsets the admin menu item from administrators in wp-admin. "admin_init" is a way of calling the action before any other hook is triggered in wp-admin (call back only). Jetpack triggers super late which is why setting a priority of 1 or 11 or 99999 won't clear it.

*If you're like me, you're only using it for free woo commerce tax calculation and you never want to see jetpack again as well as your annoyed about how much resources it takes from your ultra light wordpress..

someone asked if this removes jetpack from taking up resources, no.

If you need further help nuking the resource hog (jetpack) I suggest disabling all the modules in jetpack. youtube video disabling jetpack modules

tony if your like me, and all you use is the zip code tax calculation and hate ads and ... jetpack paste this in your functions.php

/* Disable Ajax Call from WooCommerce on front page and posts // wc-ajax=get_refreshed_fragments fix*/
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);
function dequeue_woocommerce_cart_fragments() {
if (is_front_page() || is_single() ) wp_dequeue_script('wc-cart-fragments');

// remove heart beat api widgets
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {

// Analytics, if you need it, then view it the right way. Anywhere but wp dashboard.
    function jetpackcom_no_woo_analytics( $tools ) {
    $index = array_search( 'woocommerce-analytics/wp-woocommerce-analytics.php', $tools );
    if ( false !== $index ) {
        unset( $tools[ $index ] );
    return $tools;
add_filter( 'jetpack_tools_to_include', 'jetpackcom_no_woo_analytics' );

// kill devicepx-jetpack.js good bye ads
function tj_dequeue_devicepx() {
 wp_dequeue_script( 'devicepx' );
add_action( 'wp_enqueue_scripts', 'tj_dequeue_devicepx' );
  • 3
    Please add some details to this answer (rather than just dropping some code, even if it is fully workable). Thanks! – Christine Cooper Dec 4 '20 at 8:01
  • Does this just remove it from the dashboard navigation or does it outright suppress all the other things Jetpack is attempting to do? – Tony Djukic Dec 8 '20 at 23:14
function remove_menus(){
if ( ! current_user_can( 'administrator' ) ) {
remove_menu_page( 'jetpack' );
add_action( 'admin_menu', 'remove_menus', 999 );

This seemed to work for me and allowed me to only give access to administrators. You can adapt it to hide any page from the Wordpress list here.

Your Answer

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