mirror of
https://ghproxy.net/https://github.com/abhijitb/helix.git
synced 2025-08-28 06:26:00 +08:00
1. Added API backend for settings 2. Added React components for the settings page 3. Added JS lint using @wordpress/scripts 4. Lint fixes for PHP
173 lines
4.8 KiB
PHP
173 lines
4.8 KiB
PHP
<?php
|
|
/**
|
|
* Customizes the WordPress admin menu for Helix.
|
|
* This removes unwanted menu items and keeps only the ones you want
|
|
*
|
|
* @package Helix
|
|
*/
|
|
|
|
add_action(
|
|
'current_screen',
|
|
function ( $current_screen ) {
|
|
if ( ! $current_screen ) {
|
|
return;
|
|
}
|
|
|
|
// Check if we're on any Helix admin page.
|
|
$helix_pages = array(
|
|
'toplevel_page_helix',
|
|
'toplevel_page_helix-posts',
|
|
'toplevel_page_helix-users',
|
|
'toplevel_page_helix-settings',
|
|
);
|
|
|
|
if ( ! in_array( $current_screen->id, $helix_pages, true ) ) {
|
|
return;
|
|
}
|
|
|
|
// 1) Remove default WordPress admin menus when viewing Helix.
|
|
remove_menu_page( 'index.php' ); // Dashboard.
|
|
remove_menu_page( 'edit.php' ); // Posts.
|
|
remove_menu_page( 'upload.php' ); // Media.
|
|
remove_menu_page( 'edit.php?post_type=page' ); // Pages.
|
|
remove_menu_page( 'edit-comments.php' ); // Comments.
|
|
remove_menu_page( 'themes.php' ); // Appearance.
|
|
remove_menu_page( 'plugins.php' ); // Plugins.
|
|
remove_menu_page( 'users.php' ); // Users.
|
|
remove_menu_page( 'tools.php' ); // Tools.
|
|
remove_menu_page( 'options-general.php' ); // Settings.
|
|
|
|
// Remove all admin menu separators.
|
|
remove_all_admin_menu_separators();
|
|
},
|
|
10
|
|
);
|
|
|
|
/**
|
|
* Remove all admin menu separators.
|
|
*/
|
|
function remove_all_admin_menu_separators() {
|
|
global $menu;
|
|
if ( is_array( $menu ) ) {
|
|
foreach ( $menu as $key => $item ) {
|
|
// Check if menu item is a separator.
|
|
if ( false !== strpos( $item[4], 'wp-menu-separator' ) ) {
|
|
unset( $menu[ $key ] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add WordPress Admin menu item conditionally.
|
|
*/
|
|
|
|
add_action(
|
|
'admin_menu',
|
|
function () {
|
|
global $pagenow;
|
|
|
|
// Check if we're going to the Helix page by looking at the sanitized request.
|
|
$page_requested = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_URL );
|
|
$is_helix_request = ( 'admin.php' === $pagenow && ( 'helix' === $page_requested || strpos( $page_requested, 'helix-' ) === 0 ) );
|
|
$use_default_admin = get_option( 'helix_use_default_admin', false );
|
|
|
|
// Always show the WordPress Admin link when navigating to Helix, or when not in default admin mode.
|
|
if ( $is_helix_request || ! $use_default_admin ) {
|
|
// If this is a Helix request, ensure we're in Helix mode.
|
|
if ( $is_helix_request ) {
|
|
update_option( 'helix_use_default_admin', false );
|
|
}
|
|
|
|
// Add Helix menu items.
|
|
add_menu_page(
|
|
'Helix Posts',
|
|
'Posts',
|
|
'edit_posts',
|
|
'helix-posts',
|
|
'helix_posts_callback',
|
|
'dashicons-admin-post',
|
|
3
|
|
);
|
|
|
|
add_menu_page(
|
|
'Helix Users',
|
|
'Users',
|
|
'list_users',
|
|
'helix-users',
|
|
'helix_users_callback',
|
|
'dashicons-admin-users',
|
|
4
|
|
);
|
|
|
|
add_menu_page(
|
|
'Helix Settings',
|
|
'Settings',
|
|
'manage_options',
|
|
'helix-settings',
|
|
'helix_settings_callback',
|
|
'dashicons-admin-settings',
|
|
5
|
|
);
|
|
|
|
// Add a menu item to go back to default WordPress admin.
|
|
add_menu_page(
|
|
'WordPress Admin', // Page title.
|
|
'WordPress Admin', // Menu title.
|
|
'read', // Capability.
|
|
'wordpress-admin', // Menu slug.
|
|
'wordpress_admin_callback', // Callback function.
|
|
'dashicons-wordpress', // Icon.
|
|
6 // Position (after Settings menu).
|
|
);
|
|
}
|
|
},
|
|
1000
|
|
);
|
|
|
|
/**
|
|
* Add custom Helix menu items (only when on Helix page).
|
|
*/
|
|
/* previous current_screen callbacks combined into the single handler above */
|
|
|
|
/**
|
|
* Callback functions for custom menu items.
|
|
*/
|
|
function wordpress_admin_callback() {
|
|
// Set the option to use default WordPress admin.
|
|
update_option( 'helix_use_default_admin', true );
|
|
|
|
// Show a clean message and let the user navigate naturally.
|
|
?>
|
|
<div style="text-align: center; padding: 50px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;">
|
|
<h2>✓ Switched to WordPress Admin</h2>
|
|
<p>You can now navigate to any WordPress admin page normally.</p>
|
|
<p><a href="<?php echo esc_url( admin_url( 'index.php' ) ); ?>" class="button button-primary">Go to Dashboard</a></p>
|
|
<p><a href="<?php echo esc_url( admin_url( 'edit.php' ) ); ?>" class="button">Posts</a>
|
|
<a href="<?php echo esc_url( admin_url( 'users.php' ) ); ?>" class="button">Users</a>
|
|
<a href="<?php echo esc_url( admin_url( 'options-general.php' ) ); ?>" class="button">Settings</a>
|
|
</p>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Callback function for Posts menu item.
|
|
*/
|
|
function helix_posts_callback() {
|
|
echo '<div id="helix-posts-root"></div>';
|
|
}
|
|
|
|
/**
|
|
* Callback function for Users menu item.
|
|
*/
|
|
function helix_users_callback() {
|
|
echo '<div id="helix-users-root"></div>';
|
|
}
|
|
|
|
/**
|
|
* Callback function for Settings menu item.
|
|
*/
|
|
function helix_settings_callback() {
|
|
echo '<div id="helix-settings-root"></div>';
|
|
}
|