Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../core/utils
File: ab-test.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace Elementor\Core\Utils;
[2] Fix | Delete
[3] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[4] Fix | Delete
exit; // Exit if accessed directly.
[5] Fix | Delete
}
[6] Fix | Delete
[7] Fix | Delete
/**
[8] Fix | Delete
* Core A/B Testing utility class
[9] Fix | Delete
*
[10] Fix | Delete
* Provides A/B testing functionality for Core features.
[11] Fix | Delete
* Uses WordPress transients for caching and user-specific variation assignment.
[12] Fix | Delete
*/
[13] Fix | Delete
class Ab_Test {
[14] Fix | Delete
[15] Fix | Delete
const PREFIX_CACHE_KEY = '_elementor_ab_test_';
[16] Fix | Delete
const CACHE_TTL = 90 * DAY_IN_SECONDS;
[17] Fix | Delete
[18] Fix | Delete
/**
[19] Fix | Delete
* Get variation for a specific test
[20] Fix | Delete
*
[21] Fix | Delete
* @param string $test_name The name of the A/B test
[22] Fix | Delete
* @param int $user_id Optional user ID, defaults to current user
[23] Fix | Delete
* @return int Returns 1 or 2 for variation assignment
[24] Fix | Delete
*/
[25] Fix | Delete
public static function get_variation( $test_name, $user_id = null ): int {
[26] Fix | Delete
if ( null === $user_id ) {
[27] Fix | Delete
$user_id = get_current_user_id();
[28] Fix | Delete
}
[29] Fix | Delete
[30] Fix | Delete
$variation_id = self::get_variation_id_from_cache( $test_name, $user_id );
[31] Fix | Delete
[32] Fix | Delete
if ( false === $variation_id ) {
[33] Fix | Delete
$variation_id = self::get_random_variation();
[34] Fix | Delete
self::set_variation_id_from_cache( $test_name, $user_id, $variation_id );
[35] Fix | Delete
}
[36] Fix | Delete
[37] Fix | Delete
return absint( $variation_id );
[38] Fix | Delete
}
[39] Fix | Delete
[40] Fix | Delete
/**
[41] Fix | Delete
* Check if user should see the feature (50% probability)
[42] Fix | Delete
*
[43] Fix | Delete
* @param string $test_name The name of the A/B test
[44] Fix | Delete
* @param int $user_id Optional user ID, defaults to current user
[45] Fix | Delete
* @return bool True if user should see the feature
[46] Fix | Delete
*/
[47] Fix | Delete
public static function should_show_feature( $test_name, $user_id = null ): bool {
[48] Fix | Delete
$variation = self::get_variation( $test_name, $user_id );
[49] Fix | Delete
return 1 === $variation; // Only variation 1 sees the feature
[50] Fix | Delete
}
[51] Fix | Delete
[52] Fix | Delete
/**
[53] Fix | Delete
* Get variation ID from cache
[54] Fix | Delete
*
[55] Fix | Delete
* @param string $test_name The name of the A/B test
[56] Fix | Delete
* @param int $user_id User ID
[57] Fix | Delete
* @return int|false Variation ID or false if not cached
[58] Fix | Delete
*/
[59] Fix | Delete
private static function get_variation_id_from_cache( $test_name, $user_id ) {
[60] Fix | Delete
$cache_key = self::PREFIX_CACHE_KEY . $test_name . '_' . $user_id;
[61] Fix | Delete
return get_transient( $cache_key );
[62] Fix | Delete
}
[63] Fix | Delete
[64] Fix | Delete
/**
[65] Fix | Delete
* Set variation ID in cache
[66] Fix | Delete
*
[67] Fix | Delete
* @param string $test_name The name of the A/B test
[68] Fix | Delete
* @param int $user_id User ID
[69] Fix | Delete
* @param int $variation_id Variation ID to cache
[70] Fix | Delete
*/
[71] Fix | Delete
private static function set_variation_id_from_cache( $test_name, $user_id, $variation_id ): void {
[72] Fix | Delete
$cache_key = self::PREFIX_CACHE_KEY . $test_name . '_' . $user_id;
[73] Fix | Delete
set_transient( $cache_key, $variation_id, self::CACHE_TTL );
[74] Fix | Delete
}
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Generate random variation (1 or 2)
[78] Fix | Delete
*
[79] Fix | Delete
* @return int Random variation ID
[80] Fix | Delete
*/
[81] Fix | Delete
private static function get_random_variation(): int {
[82] Fix | Delete
return mt_rand( 1, 2 );
[83] Fix | Delete
}
[84] Fix | Delete
}
[85] Fix | Delete
[86] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function