'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('