'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' ];
}
}