Удаление Пользовательских Виджетов Панели Мониторинга
Вот код о том, как удалить все виджеты панели мониторинга - виджеты по умолчанию и виджеты плагинов, но я хочу изменить код, чтобы удалять только пользовательские виджеты панели мониторинга, а не виджеты по умолчанию.
// Create the function to use in the action hook
function remove_dashboard_widgets() {
global $wp_meta_boxes;
if ( !array( $wp_meta_boxes ) ) return;
foreach ( $wp_meta_boxes as $widget_section => $widget_locations ) {
if ( $widget_section == 'dashboard' ) {
foreach ( $widget_locations as $widget_location => $widget_types ) {
foreach ( $widget_types as $widget_type => $widgets ) {
foreach ( $widgets as $widget_name => $widget ) {
remove_meta_box( $widget_name, $widget_section, $widget_location );
}
}
}
}
}
}
// Hook into the 'wp_dashboard_setup' action to register our function
add_action('wp_dashboard_setup', 'remove_dashboard_widgets', 11 );
3
2 answers
Встроенные виджеты панели мониторинга каким-то образом не помечены, вам нужно использовать фиксированный список:
'dashboard_right_now',
'dashboard_plugins',
'dashboard_quick_press',
'dashboard_recent_drafts',
'dashboard_recent_comments',
'dashboard_incoming_links',
'dashboard_primary',
'dashboard_secondary'
Поэтому ваш код должен проверить, есть ли текущий виджет в этом списке, и удалить виджет, если его нет:
add_action(
'wp_dashboard_setup',
't5_remove_custom_dashboard_widgets',
11
);
function t5_remove_custom_dashboard_widgets()
{
global $wp_meta_boxes;
$builtin = array (
'dashboard_right_now',
'dashboard_plugins',
'dashboard_quick_press',
'dashboard_recent_drafts',
'dashboard_recent_comments',
'dashboard_incoming_links',
'dashboard_primary',
'dashboard_secondary'
);
if ( empty ( $wp_meta_boxes['dashboard'] ) )
return;
$widget_groups = $wp_meta_boxes['dashboard'];
foreach ( $widget_groups as $section => $widget_group )
foreach ( $widget_group as $widgets )
foreach ( $widgets as $id => $widget )
if ( ! in_array( $id, $builtin ) )
remove_meta_box( $id, 'dashboard', $section );
}
3
Author: fuxia, 2013-04-21 19:50:07
WordPress регистрирует свои виджеты с префиксом dashboard_
, чтобы вы могли проверить наличие этого префикса перед удалением виджета.
// Create the function to use in the action hook
function remove_dashboard_widgets() {
global $wp_meta_boxes;
if ( !array( $wp_meta_boxes ) ) return;
foreach ( $wp_meta_boxes as $widget_section => $widget_locations ) {
if ( $widget_section == 'dashboard' ) {
foreach ( $widget_locations as $widget_location => $widget_types ) {
foreach ( $widget_types as $widget_type => $widgets ) {
foreach ( $widgets as $widget_name => $widget ) {
preg_match('/^dashboard_/',$widget_name,$matches);
if ('dashboard_' !== $matches[0]) {
remove_meta_box( $widget_name, $widget_section, $widget_location );
}
}
}
}
}
}
}
// Hook into the 'wp_dashboard_setup' action to register our function
add_action('wp_dashboard_setup', 'remove_dashboard_widgets', 11 );
Конечно, ничто не мешает какому-либо плагину или теме зарегистрировать виджет с тем же префиксом.
2
Author: s_ha_dum, 2013-04-21 20:00:38