get_results("SELECT * FROM ".$wpdb->prefix."abtest_experiments"); foreach ($experiments as $exp) { if (!isset($_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$exp->id.'_variation']) || $_SESSION['abtest_debug']) { // Get variation $variation = $wpdb->get_row( $wpdb->prepare("SELECT * FROM ".$wpdb->prefix."abtest_variations WHERE experiment_id=%d AND active=1 ORDER BY RAND() LIMIT 1", $exp->id) ); // Set session $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$exp->id.'_id'] = $variation->id; $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$exp->id.'_variation'] = $variation->content; $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$exp->id.'_name'] = $variation->name; } } } function abtest_experiment($id) { echo abtest_get_experiment($id); } function abtest_get_experiment($id) { global $wpdb; global $abtest_viewed_variations; $variation_id = $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$id.'_id']; if (!in_array($variation_id, $abtest_viewed_variations)) { // Add to viewed variations array $abtest_viewed_variations[] = $variation_id; } return $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$id.'_variation']; } function abtest_name($experiment_id) { echo abtest_get_name($experiment_id); } function abtest_get_name($experiment_id) { global $wpdb; return $_SESSION['abtest_experiment_'.$wpdb->prefix.'_'.$experiment_id.'_name']; } function abtest_variation_view($variation_id) { global $wpdb; if (!$_SESSION['abtest_debug']) { // Increase views on the variation $wpdb->query( $wpdb->prepare("UPDATE ".$wpdb->prefix."abtest_variations SET views=views+1 WHERE id=%d", $variation_id) ); $wpdb->query( $wpdb->prepare(" INSERT INTO ".$wpdb->prefix."abtest_variation_views(variation_id, session_id, ip, date) VALUES(%d, %s, %s, NOW())", $variation_id, session_id(), $_SERVER['REMOTE_ADDR'] ) ); } } function abtest_goal_hit($goal_id) { global $wpdb; if (!$_SESSION['abtest_debug']) { $wpdb->query( $wpdb->prepare(" INSERT INTO ".$wpdb->prefix."abtest_goal_hits(goal_id, session_id, ip, date) VALUES(%d, %s, %s, NOW())", $goal_id, session_id(), $_SERVER['REMOTE_ADDR'] ) ); } } add_action('wp_head', 'abtest_head_script'); function abtest_head_script() { ?> get_results("SELECT * FROM ".$wpdb->prefix."abtest_experiments WHERE type='javascript'"); if (count($experiments) > 0) { ?> get_results("SELECT * FROM ".$wpdb->prefix."abtest_experiments WHERE type='stylesheet'"); if (count($experiments) > 0) { ?> '', 'goal' => '', 'variable' => '', ), $atts ) ); if ($experiment != '') { if ($variable == 'name') { return abtest_get_name($experiment); } else { return abtest_get_experiment($experiment); } } elseif ($goal != '') { $abtest_hit_goals[] = $goal; } else { return "Unknown A/B test"; } } add_filter('template', 'change_theme'); add_filter('stylesheet', 'change_theme'); function change_theme($theme) { global $wpdb; $exp = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."abtest_experiments WHERE type='theme'"); if ($exp) { $new_theme = abtest_get_experiment($exp->id); if ($new_theme != '') { $theme = $new_theme; } } return $theme; } add_action('admin_menu', 'abtest_admin_menu'); function abtest_admin_menu() { add_menu_page('A/B Testing', 'A/B Testing', 'manage_options', 'abtest', 'abtest_admin'); } function abtest_admin() { global $wpdb; include 'abtest_admin.php'; } function abtest_rss(){ echo '
"; } add_action('wp_dashboard_setup', 'abtest_rss_widget'); function abtest_rss_widget(){ if (get_option('abtest_show_dashboard_widget', 1)) { wp_add_dashboard_widget( 'abtest-rss', 'A/B Test for WordPress', 'abtest_rss'); } }?>