是否有隐藏所有仪表板小部件而不是删除它们的方法?我希望我的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\' );
最合适的回答,由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列,则不会删除其他键