隐藏所有仪表板小工具(不删除)

时间:2014-04-14 作者:Howdy_McGee

是否有隐藏所有仪表板小部件而不是删除它们的方法?我希望我的widget是第一个widget,但根据文档,由于它都是“核心”,因此无法指定widget的显示位置,因此我的解决方案是最初隐藏所有widget。我遇到了这个,但这只隐藏了欢迎小部件,我试图复制欢迎小部件的隐藏,但没有成功(什么都没有发生):

function remove_dashboard_widgets() {
    global $wp_meta_boxes;


    //unset($wp_meta_boxes[\'dashboard\'][\'normal\'][\'core\'][\'dashboard_right_now\']);
    //unset($wp_meta_boxes[\'dashboard\'][\'side\'][\'core\'][\'dashboard_quick_press\']);
    //unset($wp_meta_boxes[\'dashboard\'][\'side\'][\'core\'][\'dashboard_primary\']);
    update_user_meta( get_current_user_id(), \'show_welcome_panel\', false );
    update_user_meta( get_current_user_id(), \'dashboard_right_now\', false );
    update_user_meta( get_current_user_id(), \'dashboard_quick_press\', false );
    //remove_meta_box( \'dashboard_activity\', \'dashboard\', \'normal\');

}
add_action(\'wp_dashboard_setup\', \'remove_dashboard_widgets\' );

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

首先,我必须说,经过快速调查后,似乎没有\'dashboard_right_now\'\'dashboard_quick_press\' usermeta存在。。。因此,在代码中将其设置为false并不能做任何事情。

也就是说

根据文档,无法指定小部件的显示位置

医生撒谎。

当用户注销然后再次登录时,所有小部件都保持相同的位置和顺序,一旦没有魔力,这些信息必须保存在某个地方。

客户端的东西是不可能的,因为即使用户在不同的PC上登录,小部件的位置也不会改变。。so位置和顺序must me保存在数据库中。

快速搜索后,似乎有两个不同的选项可以控制仪表板小部件的位置:

  • meta-box-order_dashboard
  • metaboxhidden_dashboard

    “正常”、“侧边”、“列3”和“列4”。

    自WP 3.8以来,仪表板默认有4列1,每个键都指向一列,第一列称为“正常”,第二列称为“侧边”,我想是为了向后兼容。

    每个键都包含该列中显示的小部件ID的逗号分隔字符串,所以若要强制小部件成为第一列中唯一的小部件,必须\'normal\' 列只包含您的小部件id,并将所有其他小部件移动到另一列,如下所示:

    function order_dashboard_widgets() {
      $uid =  get_current_user_id();
      // hide welcome panel
      update_user_meta( $uid, \'show_welcome_panel\', \'0\' );
      // add your widget
      wp_add_dashboard_widget(
        \'unsocial_widget\', \'Antisocial Dashboard Widget\',
        function() {
          echo \'<h1>I like to be the alone!</h1>\';
        }
      );
      $order = (array) get_user_meta( $uid, \'meta-box-order_dashboard\', true );
      if ( ! isset( $order[\'normal\'] ) ) $order[\'normal\'] = \'\';
      if ( $order[\'normal\'] !== \'unsocial_widget\' ) {
        $normal = explode( \',\', $order[\'normal\'] );
        $unsocial_key = array_search( \'unsocial_widget\', $normal, true );
        if ( $unsocial_key !== false ) {
          unset( $normal[$unsocial_key] );
        }
        $order[\'side\'] = implode( \',\', $normal ) . \',\' . $order[\'side\'];
        $order[\'normal\'] = \'unsocial_widget\'; // yours is the only widget in 1st column
        update_user_meta( $uid, \'meta-box-order_dashboard\', $order );
      }
    }
    add_action( \'wp_dashboard_setup\', \'order_dashboard_widgets\' );
    
    这样,您的小部件将始终是第一列中的第一个也是唯一一个小部件。

    现在,为了回答您的问题,是的,也可以使用\'metaboxhidden_dashboard\' 用户元:它包含一个必须隐藏的小部件ID数组,因此您可以用所有仪表板小部件填充它。

    function remove_dashboard_widgets() {
      // add your widget
      wp_add_dashboard_widget(
        \'unsocial_widget\', \'Antisocial Dashboard Widget\',
        function() {
          echo \'<h1>I like to be the alone!</h1>\';
        }
      );
      $uid =  get_current_user_id();
      // hide welcome panel
      update_user_meta( $uid, \'show_welcome_panel\', \'0\' );
      // get the current hidden metaboxes
      $hidden = get_user_meta( $uid, \'metaboxhidden_dashboard\' );
      // the metaboxes to be hidden
      $to_hide = array(
        \'dashboard_right_now\',
        \'dashboard_activity\',
        \'dashboard_quick_press\',
        \'dashboard_primary\'
      );
      // if not already hidden, hide
      if ( $hidden !== $to_hide ) {
        update_user_meta( $uid, \'metaboxhidden_dashboard\', $to_hide );
      }
    }
    add_action( \'wp_dashboard_setup\', \'remove_dashboard_widgets\' );
    
    然而,通过这种方式,用户将无法再隐藏、显示或移动小部件,因为在每次登录时,它们都会再次被隐藏(但您的小部件除外……),这就是为什么我更喜欢前面的解决方案。。。

    也许,如果您想隐藏所有其他小部件,您只能在用户第一次访问仪表板时这样做,并且在所有子任务访问中,只需使用前面的函数来订购小部件。(您可以在first vist上保存用户元,以了解当前用户是否已经访问了仪表板)。

    Note: 当然,任何其他插件都可以使用相同的代码,因此您永远不能绝对肯定您的插件是第一个小部件。。。毕竟这个答案现在已经公开了;)


    1 使用几行代码可以have again possibility to use a custom number of columns 但即使在这种情况下,数组也保持不变:如果允许的列少于4列,则不会删除其他键

结束

相关推荐

WordPress dashboard

我正在努力从本地机器上的HTML/CSS模板开发WordPress。但在从WordPress仪表板激活主题并单击访问站点链接后,我无法查看仪表板的WordPress栏。请指导需要做什么。谢谢和问候德巴西斯