register(new Beep_Elementor_Widget()); } }, 5); // Admin settings (Giphy API key only — full settings via Beep_Settings) add_action('admin_menu', [__CLASS__, 'add_admin_menu']); add_action('admin_init', [__CLASS__, 'register_settings']); } public static function add_admin_menu() { add_options_page( 'Beep Settings', 'Beep', 'manage_options', 'beep-settings', [__CLASS__, 'render_settings_page'] ); } public static function register_settings() { register_setting('beep_settings_group', 'beep_giphy_key', [ 'sanitize_callback' => 'sanitize_text_field', ]); add_settings_section('beep_main_section', 'API Configuration', null, 'beep-settings'); add_settings_field( 'beep_giphy_key', 'Giphy API Key', [__CLASS__, 'giphy_key_field'], 'beep-settings', 'beep_main_section', ['label_for' => 'beep_giphy_key'] ); } public static function giphy_key_field() { $key = get_option('beep_giphy_key', ''); echo ''; echo '

Get a free API key at developers.giphy.com

'; } public static function render_settings_page() { if (!current_user_can('manage_options')) return; echo '

Beep Settings

'; echo '
'; settings_fields('beep_settings_group'); do_settings_sections('beep-settings'); submit_button(); echo '
'; } public static function activate() { Beep_CPT::register(); Beep_Likes::create_table(); Beep_Polls::create_tables(); Beep_Replies::create_tables(); flush_rewrite_rules(); } public static function deactivate() { flush_rewrite_rules(); } public static function enqueue_assets() { wp_enqueue_style( 'beep', BEEP_URL . 'assets/beep.css', [], BEEP_VERSION ); wp_enqueue_script( 'beep', BEEP_URL . 'assets/beep.js', [], BEEP_VERSION, true ); $giphy_key = get_option('beep_giphy_key', ''); wp_localize_script('beep', 'BeepConfig', [ 'restUrl' => esc_url_raw(rest_url('beep/v1/')), 'nonce' => wp_create_nonce('wp_rest'), 'charLimit' => BEEP_CHAR_LIMIT, 'loginUrl' => esc_url_raw(wp_login_url(is_singular() ? get_permalink() : home_url('/'))), 'isLoggedIn' => is_user_logged_in(), 'giphyKey' => $giphy_key, ]); } }