'16px', 'apbox_button_color' => '#ff6600', 'apbox_currency' => 'USD', 'apbox_heading_level' => 'h2', 'apbox_delete_data_on_uninstall' => 0, 'apbox_button_text' => 'Buy Now' ]; } // Add settings public static function register_settings() { // Registers setting as global and stores it in wp_options register_setting( 'apbox_settings_group', 'apbox_font_size', ['sanitize_callback' => 'sanitize_text_field'] ); register_setting( 'apbox_settings_group', 'apbox_button_color', ['sanitize_callback' => 'sanitize_hex_color'] ); register_setting( 'apbox_settings_group', 'apbox_currency', ['sanitize_callback' => 'sanitize_text_field'] ); register_setting( 'apbox_settings_group', 'apbox_heading_level', ['sanitize_callback' => [ __CLASS__, 'sanitize_heading_level' ] ] ); register_setting( 'apbox_settings_group', 'apbox_button_text', ['sanitize_callback' => 'sanitize_text_field'] ); register_setting( 'apbox_settings_group', 'apbox_delete_data_on_uninstall', ['sanitize_callback' => 'rest_sanitize_boolean'] ); // Add settings section for styling add_settings_section( 'apbox_styling_section', 'Styling Options', null, 'apbox_settings' ); // Product Box section add_settings_section( 'apbox_product_box_section', 'Product Box', null, 'apbox_settings' ); // Add settings section for admin options add_settings_section('apbox_admin_section', 'Admin Settings', null, 'apbox_settings' ); // Add settings field for font size add_settings_field( 'apbox_font_size', 'Font Size (e.g., 16px or 1rem)', [ __CLASS__, 'font_size_field_callback' ], 'apbox_settings', 'apbox_styling_section' ); // Add settings field for button color add_settings_field( 'apbox_button_color', 'Button Color (HEX)', [ __CLASS__, 'button_color_field_callback' ], 'apbox_settings', 'apbox_styling_section' ); // Add settings field for currency add_settings_field( 'apbox_currency', 'Currency', [ __CLASS__, 'currency_field_callback' ], 'apbox_settings', 'apbox_product_box_section' ); add_settings_field( 'apbox_heading_level', 'Heading Level', [ __CLASS__, 'heading_level_field_callback' ], 'apbox_settings', 'apbox_product_box_section' ); // Add settings field for button text add_settings_field( 'apbox_button_text', 'Button Text', [ __CLASS__, 'button_text_field_callback' ], 'apbox_settings', 'apbox_product_box_section' ); // Add settings field for data deletion when uninstalling add_settings_field( 'apbox_delete_data_on_uninstall', 'Delete Data on Uninstall', [ __CLASS__, 'delete_data_field_callback' ], 'apbox_settings', 'apbox_admin_section' ); } // Add reset functionality for settings public static function maybe_reset_settings() { if ( isset( $_POST['apbox_reset_defaults'] ) && check_admin_referer( 'apbox_reset_defaults_action', 'apbox_reset_defaults_nonce' ) ) { $defaults = self::get_defaults(); foreach ( $defaults as $key => $value ) { update_option( $key, $value ); } // Redirect before output starts wp_safe_redirect( wp_nonce_url( admin_url( 'admin.php?page=apbox_settings&apbox_reset=1' ), 'apbox_reset_notice' ) ); exit; } } // Display settings page public static function render_settings_page() { ?>

Affiliate Product Boxes Settings

"; } public static function button_color_field_callback() { $defaults = self::get_defaults(); $value = esc_attr( get_option( 'apbox_button_color', $defaults['apbox_button_color'] ) ); echo ""; } public static function delete_data_field_callback() { $value = get_option( 'apbox_delete_data_on_uninstall', 0 ); ?> '; foreach ( $currencies as $code => $label ) { echo ""; } echo ''; } public static function heading_level_field_callback() { $defaults = self::get_defaults(); $value = get_option( 'apbox_heading_level', $defaults['apbox_heading_level'] ); $value = self::sanitize_heading_level( $value ); $heading_levels = self::get_heading_level_options(); echo ''; } public static function button_text_field_callback() { $defaults = self::get_defaults(); $value = get_option( 'apbox_button_text', $defaults['apbox_button_text'] ); echo ""; } public static function enqueue_color_picker( $hook ) { // Only load on plugin settings page if ( strpos( $hook, '_page_apbox_settings' ) === false ) { return; } wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'apbox-color-script', plugin_dir_url( __FILE__ ) . '../assets/js/color-picker.js', [ 'wp-color-picker' ], APBOX_VERSION, true ); } // Return all ISO 4217 currencies with symbols public static function get_currencies() { return [ 'AED' => __( 'United Arab Emirates Dirham (د.إ)', 'affiliate-product-boxes' ), 'AFN' => __( 'Afghan Afghani (؋)', 'affiliate-product-boxes' ), 'ALL' => __( 'Albanian Lek (L)', 'affiliate-product-boxes' ), 'AMD' => __( 'Armenian Dram (֏)', 'affiliate-product-boxes' ), 'ANG' => __( 'Netherlands Antillean Guilder (ƒ)', 'affiliate-product-boxes' ), 'AOA' => __( 'Angolan Kwanza (Kz)', 'affiliate-product-boxes' ), 'ARS' => __( 'Argentine Peso ($)', 'affiliate-product-boxes' ), 'AUD' => __( 'Australian Dollar (A$)', 'affiliate-product-boxes' ), 'AWG' => __( 'Aruban Florin (ƒ)', 'affiliate-product-boxes' ), 'AZN' => __( 'Azerbaijani Manat (₼)', 'affiliate-product-boxes' ), 'BAM' => __( 'Bosnia-Herzegovina Convertible Mark (KM)', 'affiliate-product-boxes' ), 'BBD' => __( 'Barbadian Dollar (Bds$)', 'affiliate-product-boxes' ), 'BDT' => __( 'Bangladeshi Taka (৳)', 'affiliate-product-boxes' ), 'BGN' => __( 'Bulgarian Lev (лв)', 'affiliate-product-boxes' ), 'BHD' => __( 'Bahraini Dinar (.د.ب)', 'affiliate-product-boxes' ), 'BIF' => __( 'Burundian Franc (FBu)', 'affiliate-product-boxes' ), 'BMD' => __( 'Bermudian Dollar (BD$)', 'affiliate-product-boxes' ), 'BND' => __( 'Brunei Dollar (B$)', 'affiliate-product-boxes' ), 'BOB' => __( 'Bolivian Boliviano (Bs.)', 'affiliate-product-boxes' ), 'BRL' => __( 'Brazilian Real (R$)', 'affiliate-product-boxes' ), 'BSD' => __( 'Bahamian Dollar (B$)', 'affiliate-product-boxes' ), 'BTN' => __( 'Bhutanese Ngultrum (Nu.)', 'affiliate-product-boxes' ), 'BWP' => __( 'Botswana Pula (P)', 'affiliate-product-boxes' ), 'BYN' => __( 'Belarusian Ruble (Br)', 'affiliate-product-boxes' ), 'BZD' => __( 'Belize Dollar (BZ$)', 'affiliate-product-boxes' ), 'CAD' => __( 'Canadian Dollar (C$)', 'affiliate-product-boxes' ), 'CHF' => __( 'Swiss Franc (CHF)', 'affiliate-product-boxes' ), 'CLP' => __( 'Chilean Peso (CLP$)', 'affiliate-product-boxes' ), 'CNY' => __( 'Chinese Yuan (¥)', 'affiliate-product-boxes' ), 'COP' => __( 'Colombian Peso (COL$)', 'affiliate-product-boxes' ), 'CRC' => __( 'Costa Rican Colón (₡)', 'affiliate-product-boxes' ), 'CUC' => __( 'Cuban Convertible Peso (CUC$)', 'affiliate-product-boxes' ), 'CUP' => __( 'Cuban Peso (CUP$)', 'affiliate-product-boxes' ), 'CVE' => __( 'Cape Verdean Escudo (Esc)', 'affiliate-product-boxes' ), 'CZK' => __( 'Czech Koruna (Kč)', 'affiliate-product-boxes' ), 'DJF' => __( 'Djiboutian Franc (Fdj)', 'affiliate-product-boxes' ), 'DKK' => __( 'Danish Krone (kr)', 'affiliate-product-boxes' ), 'DOP' => __( 'Dominican Peso (RD$)', 'affiliate-product-boxes' ), 'DZD' => __( 'Algerian Dinar (دج)', 'affiliate-product-boxes' ), 'EGP' => __( 'Egyptian Pound (E£)', 'affiliate-product-boxes' ), 'ERN' => __( 'Eritrean Nakfa (Nfk)', 'affiliate-product-boxes' ), 'ETB' => __( 'Ethiopian Birr (Br)', 'affiliate-product-boxes' ), 'EUR' => __( 'Euro (€)', 'affiliate-product-boxes' ), 'FJD' => __( 'Fijian Dollar (FJ$)', 'affiliate-product-boxes' ), 'FKP' => __( 'Falkland Islands Pound (£)', 'affiliate-product-boxes' ), 'GBP' => __( 'British Pound Sterling (£)', 'affiliate-product-boxes' ), 'GEL' => __( 'Georgian Lari (₾)', 'affiliate-product-boxes' ), 'GHS' => __( 'Ghanaian Cedi (₵)', 'affiliate-product-boxes' ), 'GIP' => __( 'Gibraltar Pound (£)', 'affiliate-product-boxes' ), 'GMD' => __( 'Gambian Dalasi (D)', 'affiliate-product-boxes' ), 'GNF' => __( 'Guinean Franc (FG)', 'affiliate-product-boxes' ), 'GTQ' => __( 'Guatemalan Quetzal (Q)', 'affiliate-product-boxes' ), 'GYD' => __( 'Guyanese Dollar (GY$)', 'affiliate-product-boxes' ), 'HKD' => __( 'Hong Kong Dollar (HK$)', 'affiliate-product-boxes' ), 'HNL' => __( 'Honduran Lempira (L)', 'affiliate-product-boxes' ), 'HRK' => __( 'Croatian Kuna (kn)', 'affiliate-product-boxes' ), 'HTG' => __( 'Haitian Gourde (G)', 'affiliate-product-boxes' ), 'HUF' => __( 'Hungarian Forint (Ft)', 'affiliate-product-boxes' ), 'IDR' => __( 'Indonesian Rupiah (Rp)', 'affiliate-product-boxes' ), 'ILS' => __( 'Israeli New Shekel (₪)', 'affiliate-product-boxes' ), 'INR' => __( 'Indian Rupee (₹)', 'affiliate-product-boxes' ), 'IQD' => __( 'Iraqi Dinar (ع.د)', 'affiliate-product-boxes' ), 'IRR' => __( 'Iranian Rial (﷼)', 'affiliate-product-boxes' ), 'ISK' => __( 'Icelandic Króna (kr)', 'affiliate-product-boxes' ), 'JMD' => __( 'Jamaican Dollar (J$)', 'affiliate-product-boxes' ), 'JOD' => __( 'Jordanian Dinar (JD)', 'affiliate-product-boxes' ), 'JPY' => __( 'Japanese Yen (¥)', 'affiliate-product-boxes' ), 'KES' => __( 'Kenyan Shilling (KSh)', 'affiliate-product-boxes' ), 'KGS' => __( 'Kyrgyzstani Som (с)', 'affiliate-product-boxes' ), 'KHR' => __( 'Cambodian Riel (៛)', 'affiliate-product-boxes' ), 'KMF' => __( 'Comorian Franc (CF)', 'affiliate-product-boxes' ), 'KPW' => __( 'North Korean Won (₩)', 'affiliate-product-boxes' ), 'KRW' => __( 'South Korean Won (₩)', 'affiliate-product-boxes' ), 'KWD' => __( 'Kuwaiti Dinar (KD)', 'affiliate-product-boxes' ), 'KYD' => __( 'Cayman Islands Dollar (CI$)', 'affiliate-product-boxes' ), 'KZT' => __( 'Kazakhstani Tenge (₸)', 'affiliate-product-boxes' ), 'LAK' => __( 'Lao Kip (₭)', 'affiliate-product-boxes' ), 'LBP' => __( 'Lebanese Pound (ل.ل)', 'affiliate-product-boxes' ), 'LKR' => __( 'Sri Lankan Rupee (Rs)', 'affiliate-product-boxes' ), 'LRD' => __( 'Liberian Dollar (L$)', 'affiliate-product-boxes' ), 'LSL' => __( 'Lesotho Loti (L)', 'affiliate-product-boxes' ), 'LYD' => __( 'Libyan Dinar (LD)', 'affiliate-product-boxes' ), 'MAD' => __( 'Moroccan Dirham (MAD)', 'affiliate-product-boxes' ), 'MDL' => __( 'Moldovan Leu (L)', 'affiliate-product-boxes' ), 'MGA' => __( 'Malagasy Ariary (Ar)', 'affiliate-product-boxes' ), 'MKD' => __( 'Macedonian Denar (ден)', 'affiliate-product-boxes' ), 'MMK' => __( 'Burmese Kyat (Ks)', 'affiliate-product-boxes' ), 'MNT' => __( 'Mongolian Tögrög (₮)', 'affiliate-product-boxes' ), 'MOP' => __( 'Macanese Pataca (MOP$)', 'affiliate-product-boxes' ), 'MUR' => __( 'Mauritian Rupee (₨)', 'affiliate-product-boxes' ), 'MVR' => __( 'Maldivian Rufiyaa (Rf)', 'affiliate-product-boxes' ), 'MWK' => __( 'Malawian Kwacha (MK)', 'affiliate-product-boxes' ), 'MXN' => __( 'Mexican Peso (MX$)', 'affiliate-product-boxes' ), 'MYR' => __( 'Malaysian Ringgit (RM)', 'affiliate-product-boxes' ), 'MZN' => __( 'Mozambican Metical (MT)', 'affiliate-product-boxes' ), 'NAD' => __( 'Namibian Dollar (N$)', 'affiliate-product-boxes' ), 'NGN' => __( 'Nigerian Naira (₦)', 'affiliate-product-boxes' ), 'NIO' => __( 'Nicaraguan Córdoba (C$)', 'affiliate-product-boxes' ), 'NOK' => __( 'Norwegian Krone (kr)', 'affiliate-product-boxes' ), 'NPR' => __( 'Nepalese Rupee (₨)', 'affiliate-product-boxes' ), 'NZD' => __( 'New Zealand Dollar (NZ$)', 'affiliate-product-boxes' ), 'OMR' => __( 'Omani Rial (﷼)', 'affiliate-product-boxes' ), 'PAB' => __( 'Panamanian Balboa (B/.)', 'affiliate-product-boxes' ), 'PEN' => __( 'Peruvian Sol (S/)', 'affiliate-product-boxes' ), 'PGK' => __( 'Papua New Guinean Kina (K)', 'affiliate-product-boxes' ), 'PHP' => __( 'Philippine Peso (₱)', 'affiliate-product-boxes' ), 'PKR' => __( 'Pakistani Rupee (₨)', 'affiliate-product-boxes' ), 'PLN' => __( 'Polish Złoty (zł)', 'affiliate-product-boxes' ), 'PYG' => __( 'Paraguayan Guaraní (₲)', 'affiliate-product-boxes' ), 'QAR' => __( 'Qatari Riyal (﷼)', 'affiliate-product-boxes' ), 'RON' => __( 'Romanian Leu (lei)', 'affiliate-product-boxes' ), 'RSD' => __( 'Serbian Dinar (дин.)', 'affiliate-product-boxes' ), 'RUB' => __( 'Russian Ruble (₽)', 'affiliate-product-boxes' ), 'RWF' => __( 'Rwandan Franc (FRw)', 'affiliate-product-boxes' ), 'SAR' => __( 'Saudi Riyal (﷼)', 'affiliate-product-boxes' ), 'SBD' => __( 'Solomon Islands Dollar (SI$)', 'affiliate-product-boxes' ), 'SCR' => __( 'Seychellois Rupee (₨)', 'affiliate-product-boxes' ), 'SDG' => __( 'Sudanese Pound (SDG)', 'affiliate-product-boxes' ), 'SEK' => __( 'Swedish Krona (kr)', 'affiliate-product-boxes' ), 'SGD' => __( 'Singapore Dollar (S$)', 'affiliate-product-boxes' ), 'SHP' => __( 'Saint Helena Pound (£)', 'affiliate-product-boxes' ), 'SLL' => __( 'Sierra Leonean Leone (Le)', 'affiliate-product-boxes' ), 'SOS' => __( 'Somali Shilling (Sh.so.)', 'affiliate-product-boxes' ), 'SRD' => __( 'Surinamese Dollar (SR$)', 'affiliate-product-boxes' ), 'SSP' => __( 'South Sudanese Pound (£)', 'affiliate-product-boxes' ), 'STN' => __( 'São Tomé and Príncipe Dobra (Db)', 'affiliate-product-boxes' ), 'SYP' => __( 'Syrian Pound (£S)', 'affiliate-product-boxes' ), 'SZL' => __( 'Swazi Lilangeni (E)', 'affiliate-product-boxes' ), 'THB' => __( 'Thai Baht (฿)', 'affiliate-product-boxes' ), 'TJS' => __( 'Tajikistani Somoni (ЅМ)', 'affiliate-product-boxes' ), 'TMT' => __( 'Turkmenistani Manat (T)', 'affiliate-product-boxes' ), 'TND' => __( 'Tunisian Dinar (DT)', 'affiliate-product-boxes' ), 'TOP' => __( 'Tongan Paʻanga (T$)', 'affiliate-product-boxes' ), 'TRY' => __( 'Turkish Lira (₺)', 'affiliate-product-boxes' ), 'TTD' => __( 'Trinidad and Tobago Dollar (TT$)', 'affiliate-product-boxes' ), 'TWD' => __( 'New Taiwan Dollar (NT$)', 'affiliate-product-boxes' ), 'TZS' => __( 'Tanzanian Shilling (TSh)', 'affiliate-product-boxes' ), 'UAH' => __( 'Ukrainian Hryvnia (₴)', 'affiliate-product-boxes' ), 'UGX' => __( 'Ugandan Shilling (USh)', 'affiliate-product-boxes' ), 'USD' => __( 'US Dollar ($)', 'affiliate-product-boxes' ), 'UYU' => __( 'Uruguayan Peso ($U)', 'affiliate-product-boxes' ), 'UZS' => __( 'Uzbekistan Som (сўм)', 'affiliate-product-boxes' ), 'VES' => __( 'Venezuelan Bolívar Soberano (Bs.S)', 'affiliate-product-boxes' ), 'VND' => __( 'Vietnamese Đồng (₫)', 'affiliate-product-boxes' ), 'VUV' => __( 'Vanuatu Vatu (VT)', 'affiliate-product-boxes' ), 'WST' => __( 'Samoan Tala (WS$)', 'affiliate-product-boxes' ), 'XAF' => __( 'Central African CFA Franc (FCFA)', 'affiliate-product-boxes' ), 'XCD' => __( 'East Caribbean Dollar (EC$)', 'affiliate-product-boxes' ), 'XOF' => __( 'West African CFA Franc (CFA)', 'affiliate-product-boxes' ), 'XPF' => __( 'CFP Franc (₣)', 'affiliate-product-boxes' ), 'YER' => __( 'Yemeni Rial (﷼)', 'affiliate-product-boxes' ), 'ZAR' => __( 'South African Rand (R)', 'affiliate-product-boxes' ), 'ZMW' => __( 'Zambian Kwacha (ZK)', 'affiliate-product-boxes' ), 'ZWL' => __( 'Zimbabwean Dollar (Z$)', 'affiliate-product-boxes' ), ]; } public static function sanitize_heading_level( $value ) { $allowed_headings = self::get_heading_level_options(); $value = sanitize_key( $value ); if ( ! in_array( $value, $allowed_headings, true ) ) { return 'h2'; } return $value; } private static function get_heading_level_options() { return [ 'h2', 'h3', 'h4', 'h5', 'h6' ]; } }