register_settings(); } /** * Add admin menus * * @since 1.0.0 */ public function add_menus() { $plugin_mode = get_option( 'hssm_plugin_mode', 'manager' ); // Client mode does not register the slides CPT, so Settings cannot hang off that menu. if ( 'client' === $plugin_mode ) { add_menu_page( __( 'Slide Manager', 'hi-school-slide-manager' ), __( 'Slide Manager', 'hi-school-slide-manager' ), 'manage_options', 'hssm-settings', array( $this, 'settings_page' ), 'dashicons-images-alt2', 58 ); return; } add_submenu_page( 'edit.php?post_type=hssm_slide', __( 'Slide Manager Settings', 'hi-school-slide-manager' ), __( 'Settings', 'hi-school-slide-manager' ), 'manage_options', 'hssm-settings', array( $this, 'settings_page' ) ); add_submenu_page( 'edit.php?post_type=hssm_slide', __( 'API Documentation', 'hi-school-slide-manager' ), __( 'API Docs', 'hi-school-slide-manager' ), 'manage_options', 'hssm-api-docs', array( $this, 'api_docs_page' ) ); } /** * Register plugin settings * * @since 1.0.0 */ public function register_settings() { // Register settings register_setting( 'hssm_settings', 'hssm_plugin_mode' ); register_setting( 'hssm_settings', 'hssm_api_url' ); register_setting( 'hssm_settings', 'hssm_client_site_slug' ); register_setting( 'hssm_settings', 'hssm_cache_duration' ); register_setting( 'hssm_settings', 'hssm_api_keys' ); register_setting( 'hssm_settings', 'hssm_client_api_key' ); // Add settings sections add_settings_section( 'hssm_general', __( 'General Settings', 'hi-school-slide-manager' ), array( $this, 'general_section_callback' ), 'hssm-settings' ); add_settings_section( 'hssm_notifications', __( 'Email Notifications', 'hi-school-slide-manager' ), array( $this, 'notifications_section_callback' ), 'hssm-settings' ); add_settings_section( 'hssm_api', __( 'API Settings', 'hi-school-slide-manager' ), array( $this, 'api_section_callback' ), 'hssm-settings' ); // Add settings fields add_settings_field( 'hssm_plugin_mode', __( 'Plugin Mode', 'hi-school-slide-manager' ), array( $this, 'plugin_mode_field' ), 'hssm-settings', 'hssm_general' ); add_settings_field( 'hssm_api_url', __( 'Manager API URL', 'hi-school-slide-manager' ), array( $this, 'api_url_field' ), 'hssm-settings', 'hssm_general' ); add_settings_field( 'hssm_client_site_slug', __( 'Client Site Slug', 'hi-school-slide-manager' ), array( $this, 'client_site_slug_field' ), 'hssm-settings', 'hssm_general' ); add_settings_field( 'hssm_client_api_key', __( 'Client API Key', 'hi-school-slide-manager' ), array( $this, 'client_api_key_field' ), 'hssm-settings', 'hssm_general' ); add_settings_field( 'hssm_cache_duration', __( 'Cache Duration', 'hi-school-slide-manager' ), array( $this, 'cache_duration_field' ), 'hssm-settings', 'hssm_general' ); add_settings_field( 'hssm_api_keys', __( 'API Keys', 'hi-school-slide-manager' ), array( $this, 'api_keys_field' ), 'hssm-settings', 'hssm_api' ); } /** * Settings page callback * * @since 1.0.0 */ public function settings_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } // Handle form submission if ( isset( $_POST['submit'] ) || isset( $_POST['generate_api_key'] ) || isset( $_POST['delete_api_key'] ) ) { check_admin_referer( 'hssm_settings' ); $this->handle_settings_save(); } ?>

GET /wp-json/hssm/v1/slides/{site}

GET 
Headers: X-HSSM-API-Key: your-api-key

GET /wp-json/hssm/v1/sites

GET 
Headers: X-HSSM-API-Key: your-api-key

GET /wp-json/hssm/v1/slide/{id}

GET /wp-json/hssm/v1/health

{
  "id": 123,
  "title": "Slide Title",
  "subtitle": "Slide Subtitle",
  "content": "Slide content...",
  "buttons": [
    {
      "text": "Learn More",
      "url": "https://example.com"
    }
  ],
  "order": 0,
  "background_image": {
    "id": 456,
    "url": "https://example.com/image.jpg",
    "width": 1920,
    "height": 800,
    "alt": "Image description",
    "sizes": {
      "full": "https://example.com/image.jpg",
      "large": "https://example.com/image-1024x428.jpg"
    }
  },
  "schedule": {
    "start_date": "2025-01-01 00:00:00",
    "end_date": "2025-12-31 23:59:59",
    "auto_publish": true,
    "auto_unpublish": true
  },
  "target_sites": [
    {
      "slug": "hi-school",
      "name": "Hi-School Pharmacy"
    }
  ],
  "status": "publish",
  "created": "2025-01-01 12:00:00",
  "modified": "2025-01-01 12:00:00"
}
' . __( 'General plugin settings.', 'hi-school-slide-manager' ) . '

'; } /** * Notifications section callback */ public function notifications_section_callback() { $dashboard_url = hssm_get_page_url_by_template( 'page-slide-dashboard.php', '/slide-dashboard/' ); echo '

' . esc_html__( 'Email recipients are managed on the Slide Dashboard Notifications tab.', 'hi-school-slide-manager' ) . '

'; if ( $dashboard_url ) { echo '

' . esc_html__( 'Open Slide Dashboard', 'hi-school-slide-manager' ) . '

'; } } /** * API section callback */ public function api_section_callback() { echo '

' . __( 'Generate keys on the Manager site, then paste one into each companion site under Client API Key.', 'hi-school-slide-manager' ) . '

'; } /** * Plugin mode field */ public function plugin_mode_field() { $value = get_option( 'hssm_plugin_mode', 'manager' ); ?>

'; echo '

' . __( 'The REST API base URL of the Manager site.', 'hi-school-slide-manager' ) . '

'; } /** * Client site slug field */ public function client_site_slug_field() { $value = get_option( 'hssm_client_site_slug', '' ); ?>

'; echo '

' . esc_html__( 'Used only in Client mode. Copy a key from the Manager site (Settings → API Keys) and paste it here. Requests fail with 403 until this matches a manager key.', 'hi-school-slide-manager' ) . '

'; } /** * Cache duration field */ public function cache_duration_field() { $value = get_option( 'hssm_cache_duration', 3600 ); echo ' '; echo '' . __( 'Recommended cache duration for API responses (seconds)', 'hi-school-slide-manager' ) . ''; } /** * API keys field */ public function api_keys_field() { $api_keys = get_option( 'hssm_api_keys', array() ); echo '
'; if ( empty( $api_keys ) ) { echo '

' . __( 'No API keys generated yet.', 'hi-school-slide-manager' ) . '

'; } else { echo ''; echo ''; echo ''; echo ''; echo ''; foreach ( $api_keys as $index => $key ) { echo ''; echo ''; echo ''; echo ''; } echo '
' . __( 'API Key', 'hi-school-slide-manager' ) . '' . __( 'Actions', 'hi-school-slide-manager' ) . '
' . esc_html( $key ) . ''; echo ' '; echo ''; echo '
'; } echo '

'; echo '

' . __( 'Generate a key on this Manager site, then paste it into each companion site under Settings → Client API Key.', 'hi-school-slide-manager' ) . '

'; echo '
'; // Add JavaScript for copy and delete functionality ?>