Dashboard title
add_action('admin_head', function () {
global $pagenow;
if ($pagenow !== 'index.php') return;
ob_start(function ($buffer) {
$user_id = get_current_user_id();
$columns = get_user_meta($user_id, 'shift_layout_columns', true) ?: 2;
$dropdown = '
';
return preg_replace('/(]*>.*?<\/h1>)/i', '$1' . $dropdown, $buffer, 1);
});
});
// Save layout columns via AJAX
add_action('wp_ajax_shift_save_layout_columns', 'shift_save_layout_columns');
function shift_save_layout_columns() {
if (
!isset($_POST['nonce']) ||
!wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['nonce'])), 'shift_save_layout')
) {
wp_send_json_error('Invalid nonce');
}
if (!isset($_POST['columns'])) {
wp_send_json_error('Missing columns value');
}
$columns = sanitize_text_field(wp_unslash($_POST['columns']));
update_user_meta(get_current_user_id(), 'shift_layout_columns', $columns);
wp_send_json_success();
}
// Enqueue CSS and JS
function shift_enqueue_scripts() {
global $pagenow;
if ('index.php' !== $pagenow) return;
$plugin_data = get_file_data(__FILE__, ['Version' => 'Version']);
$plugin_version = $plugin_data['Version'];
wp_enqueue_style(
'shift-styles',
plugin_dir_url(__FILE__) . 'admin/css/shift-styles.css',
[],
$plugin_version
);
$user_id = get_current_user_id();
$columns = get_user_meta($user_id, 'shift_layout_columns', true) ?: 2;
$custom_css = '#wpbody-content .metabox-holder { display: flex; flex-direction: row; flex-wrap: wrap; align-content: flex-start; justify-content: flex-start; align-items: flex-start; gap: 10px; padding: 10px; }';
switch ($columns) {
case 1:
$custom_css .= '#dashboard-widgets .postbox-container { width: 100%!important; flex-grow: 1!important; }';
break;
case 2:
$custom_css .= '#dashboard-widgets .postbox-container { width: 45%!important; flex-grow: 1!important; }';
break;
case 3:
$custom_css .= '#dashboard-widgets .postbox-container { width: 30%!important; flex-grow: 1!important; }';
break;
case 4:
$custom_css .= '#dashboard-widgets .postbox-container { width: 22%!important; flex-grow: 1!important; }';
break;
}
$custom_css .= '@media only screen and (min-width: 1200px) and (max-width: 1499px) {';
switch ($columns) {
case 1:
$custom_css .= '#dashboard-widgets .postbox-container { width: 100%!important; }';
break;
case 2:
$custom_css .= '#dashboard-widgets .postbox-container { width: 45%!important; }';
break;
case 3:
case 4:
$custom_css .= '#dashboard-widgets .postbox-container { width: 30%!important; flex-grow: 1!important; }';
break;
}
$custom_css .= '}';
$custom_css .= '@media only screen and (min-width: 800px) and (max-width: 1199px) {';
switch ($columns) {
case 1:
$custom_css .= '#dashboard-widgets .postbox-container { width: 100%!important; }';
break;
case 2:
$custom_css .= '#dashboard-widgets .postbox-container { width: 45%!important; }';
break;
case 3:
case 4:
$custom_css .= '#dashboard-widgets .postbox-container { width: 45%!important; flex-grow: 1!important; }';
break;
}
$custom_css .= '}';
$custom_css .= '@media only screen and (max-width: 799px) {';
$custom_css .= '#dashboard-widgets .postbox-container { width: 100%!important; }';
$custom_css .= '}';
wp_add_inline_style('shift-styles', $custom_css);
wp_enqueue_script(
'shift-scripts',
plugin_dir_url(__FILE__) . 'admin/js/shift-scripts.js',
[],
$plugin_version,
true
);
wp_localize_script('shift-scripts', 'shift_vars', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('shift_save_layout'),
]);
}
add_action('admin_enqueue_scripts', 'shift_enqueue_scripts');