$item ) { if ( isset( $item[2] ) && self::PAGE_SLUG === $item[2] ) { unset( $submenu['prautoblogger-settings'][ $idx ] ); break; } } } } /** * Render the dossier page. * * @return void */ public function render_page(): void { if ( ! current_user_can( 'manage_options' ) ) { return; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only dossier; no state changes. $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0; $assembler = new PRAutoBlogger_Dossier_Data_Assembler(); $dossier = $assembler->assemble( $post_id ); include PRAUTOBLOGGER_PLUGIN_DIR . 'templates/admin/dossier-page.php'; } /** * Enqueue dossier-specific CSS + JS. * * @param string $hook_suffix Current admin page hook suffix. * @return void */ public function on_enqueue_assets( string $hook_suffix ): void { $dossier_hook = 'prautoblogger_page_' . self::PAGE_SLUG; if ( $hook_suffix !== $dossier_hook ) { return; } wp_enqueue_style( 'prautoblogger-dossier', PRAUTOBLOGGER_PLUGIN_URL . 'assets/css/dossier.css', array( 'prautoblogger-admin' ), PRAUTOBLOGGER_VERSION ); wp_enqueue_script( 'prautoblogger-dossier', PRAUTOBLOGGER_PLUGIN_URL . 'assets/js/dossier.js', array(), PRAUTOBLOGGER_VERSION, true ); } /** * Build the URL to the dossier for a given post. * * @param int $post_id WordPress post ID. * @return string Admin URL to the dossier page. */ public static function url_for_post( int $post_id ): string { return admin_url( 'admin.php?page=' . self::PAGE_SLUG . '&post_id=' . $post_id ); } }