'allfactors_options_sanitize')); } add_action('admin_init', 'allfactors_register_settings'); function allfactors_register_options_page() { add_options_page('AllFactors Settings', 'AllFactors', 'manage_options', 'allfactors', 'allfactors_options_page'); } add_action('admin_menu', 'allfactors_register_options_page'); function allfactors_plugin_settings_link($links) { $settings_link = 'Settings'; array_unshift($links, $settings_link); return $links; } add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'allfactors_plugin_settings_link'); function allfactors_generateRandomUrl($minLevel = 1, $maxLevel = 5) { // Cache busting once a day to make sure latest script is loaded $result = ''; $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $charactersLength = strlen($characters); $levels = random_int($minLevel, $maxLevel); for ($i = 0; $i < $levels; $i++) { $suburl = '/'; $suburlLength = random_int(3, 16); for ($j = 0; $j < $suburlLength; $j++) { $suburl .= $characters[random_int(0, $charactersLength - 1)]; } $result .= $suburl; } $result .= ".js"; return $result; } function allfactors_insert_script() { if (!empty(get_option('allfactors_hostname'))) { $script_src = get_transient('allfactors_script'); if ($script_src === false) { $https_hostname = esc_url("https://" . get_option('allfactors_hostname')); // prevent XSS injection $script_src = $https_hostname . allfactors_generateRandomUrl(); set_transient('allfactors_script', $script_src, DAY_IN_SECONDS); } $script_handle = 'allfactors_script_handle'; if (version_compare(get_bloginfo('version'), '6.3', '>=')) { // WordPress 6.3 and above wp_enqueue_script($script_handle, $script_src, array(), null, true, array( 'async' => true )); } else { // WordPress 5.7 - 6.2 wp_register_script($script_handle, $script_src, array(), null, true); wp_enqueue_script($script_handle); // Add async attribute using a filter add_filter('script_loader_tag', function($tag, $handle) use ($script_handle) { if ($handle === $script_handle) { return str_replace('