list_table = new MetaForge_OptionsPageListTable(); $screen = get_current_screen(); if ( $screen ) { register_column_headers( $screen, $this->list_table->get_columns() ); } } } /** * Dynamically register each user-configured options page in the WP sidebar. */ public function register_options_pages() { $pages = get_option( self::OPTION_KEY, array() ); if ( empty( $pages ) ) { return; } foreach ( $pages as $page ) { $slug = sanitize_key( $page['slug'] ?? '' ); $title = sanitize_text_field( $page['title'] ?? 'Options' ); $parent = $page['parent'] ?? 'metaforge_options_pages'; if ( ! $slug ) { continue; } $wp_parent = ( $parent === 'metaforge_options_pages' || $parent === 'mfe_options_pages' ) ? 'metaforge' : $parent; if ( $wp_parent === 'none' ) { // Register as a new top-level menu page add_menu_page( $title, $title, 'manage_metaforge', 'metaforge_opts_' . $slug, function () use ( $page ) { $this->render_options_page( $page ); }, 'dashicons-admin-generic' ); // Also add a submenu item pointing to itself so the parent name is inherited properly add_submenu_page( 'metaforge_opts_' . $slug, $title, $title, 'manage_metaforge', 'metaforge_opts_' . $slug, null ); } else { add_submenu_page( $wp_parent, $title, $title, 'manage_metaforge', 'metaforge_opts_' . $slug, function () use ( $page ) { $this->render_options_page( $page ); } ); } } } /** * Render the Options Pages management screen (where you add/edit option pages). */ public function render_manager_page() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only UI action parameter. $action = isset( $_GET['action'] ) ? sanitize_key( wp_unslash( $_GET['action'] ) ) : ''; if ( $action === 'add' || $action === 'edit' ) { $this->render_form(); return; } $this->render_list(); } private function render_list() { if ( isset( $this->list_table ) ) { $list_table = $this->list_table; } else { require_once METAFORGE_PATH . 'admin/OptionsPageListTable.php'; $list_table = new MetaForge_OptionsPageListTable(); } $list_table->prepare_items(); $add_url = admin_url( 'admin.php?page=metaforge_options_pages&action=add' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only search query string parameter. $s_val = isset( $_REQUEST['s'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ) : ''; $is_empty = empty( $list_table->items ) && empty( $s_val ); ?>
Error: An options page with that slug already exists.
No field groups are assigned to this options page yet. Create a Field Group and set its Location to Options Page → .