add_menu([ 'id' => 'advset-admin-icon', 'title' => '' . $icon_svg . 'Advanced Settings', 'href' => 'javascript:void(0);', 'meta' => [ 'class' => 'advset-admin-icon', 'onclick' => 'advset_open_modal(); return false;' ] ]); } function advset_admin_bar_icon_register() { // Ensure to position the icon right after the wp menu add_action('admin_bar_menu', 'advset_admin_bar_icon', 10); } // Ensure to be the first after core menu registrations add_action('add_admin_bar_menus', 'advset_admin_bar_icon_register', -PHP_INT_MAX); /** * Add plugin action links */ if (is_admin()) { add_filter( 'plugin_action_links', function($links, $file) { if ( $file === plugin_basename( ADVSET_FILE ) ) { $links[] = '' . __('Settings') . ''; } return $links; }, 10, 2 ); } /** * Enqueue admin UI scripts and styles */ function advset_admin_ui_scripts() { // Only load for administrators if (!current_user_can('manage_options')) { return; } // Register and enqueue CSS wp_register_style( 'advset-admin-ui', plugins_url('admin-ui.css', __FILE__), [], filemtime(ADVSET_DIR . '/admin-ui/admin-ui.css') ); wp_enqueue_style('advset-admin-ui'); // Register and enqueue JavaScript wp_register_script( 'advset-admin-ui', plugins_url('admin-ui.js', __FILE__), [], filemtime(ADVSET_DIR . '/admin-ui/admin-ui.js'), true ); // Prepare data for JavaScript $js_data = [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('advset-admin-ui-nonce'), 'reactAppUrl' => plugins_url('react/app.js', __FILE__), 'reactAppCssUrl' => plugins_url('react/app.css', __FILE__), 'wpReactUrl' => includes_url('js/dist/vendor/react.min.js'), 'wpReactDomUrl' => includes_url('js/dist/vendor/react-dom.min.js'), 'showUserGuide' => get_option('advset_guide_shown') === false, ]; wp_localize_script('advset-admin-ui', 'advsetAdminUI', $js_data); wp_enqueue_script('advset-admin-ui'); // Load user guide assets if needed if ($js_data['showUserGuide']) { wp_register_style( 'advset-user-guide', plugins_url('user-guide.css', __FILE__), ['advset-admin-ui'], filemtime(ADVSET_DIR . '/admin-ui/user-guide.css') ); wp_enqueue_style('advset-user-guide'); wp_register_script( 'advset-user-guide', plugins_url('user-guide.js', __FILE__), ['advset-admin-ui', 'wp-i18n'], filemtime(ADVSET_DIR . '/admin-ui/user-guide.js'), true ); wp_enqueue_script('advset-user-guide'); } } add_action('admin_enqueue_scripts', 'advset_admin_ui_scripts'); add_action('wp_enqueue_scripts', 'advset_admin_ui_scripts'); /** * Ensure wp-api is available for administrators */ function advset_api_settings() { // Only load for administrators if (!current_user_can('manage_options')) { return; } wp_enqueue_script('wp-api'); } add_action('wp_enqueue_scripts', 'advset_api_settings', 1000); add_action('admin_enqueue_scripts', 'advset_api_settings', 1000); /** * Add modal HTML to admin footer */ function advset_admin_modal_html() { // Only show for administrators if (!current_user_can('manage_options')) { return; } // Get the loading SVG content $loading_path = ADVSET_DIR . '/admin-ui/images/loading.svg'; $loading_svg = ''; if (file_exists($loading_path)) { $loading_svg = file_get_contents($loading_path); } // Get the close SVG content $close_path = ADVSET_DIR . '/admin-ui/images/close.svg'; $close_svg = ''; if (file_exists($close_path)) { $close_svg = file_get_contents($close_path); } ?>