Bron: https://www.businessbloomer.com/woocommerce-a-b-testing-statistical-significance-formula/

Voeg op basis van de tijd (even of oneven) een A of B klasse toe aan de body

add_filter( 'body_class', 'wbmz_a_of_b_test' );
   
function wbmz_a_of_b_test( $classes ) {
   $a_or_b = time() % 2 == 0 ? 'a' : 'b';
   $classes[] = $a_or_b;
   return $classes;
}

Content laten zien op basis van body class

$classes = get_body_class(); 
if ( in_array( "a", $classes ) ) { 
   // Versie A tonen
} elseif ( in_array( "b", $classes ) ) { 
   // Versie B tonen
}

//VOORBEELD 
$classes = get_body_class(); 
if ( in_array( "a", $classes ) ) { 
   echo '<div class="track newsletter"><a href="/join" class="button">STAY UPDATED</a></div>'; 
} elseif ( in_array( "b", $classes ) ) { 
   echo '<div class="track newsletter"><a href="/join" class="button">SUBSCRIBE NOW</a></div>';
}

Alle klikt moeten worden bijgehouden om te meten. Dit doen we met opties (zonder autoload). Alleen links met track erin en zonder een #.

add_action( 'wp_footer', 'wbmz_views_click_counter_script' );
  
function wbmz_views_click_counter_script() {   
   if ( wc_current_user_has_role( 'administrator' ) ) return; // EXCLUDE ADMINS
   $classes = get_body_class();
   if ( in_array( 'a', $classes ) ) {
      if ( get_option( 'wbmz_splittest_views_a' ) ) {
         update_option( 'wbmz_splittest_views_a', (int) get_option( 'wbmz_splittest_views_a' ) + 1 );
      } else add_option( 'wbmz_splittest_views_a', 1, '', 'no' );
   } elseif ( in_array( 'b', $classes ) ) {
      if ( get_option( 'wbmz_splittest_views_b' ) ) {
         update_option( 'wbmz_splittest_views_b', (int) get_option( 'wbmz_splittest_views_b' ) + 1 );
      } else add_option( 'wbmz_splittest_views_b', 1, '', 'no' );
   }
   wc_enqueue_js( "
      $('.track > a:not([href^=\'#\'])').click(function(e){
         e.preventDefault();
         var url = $(this).attr('href');
         var target = $(this).prop('target');
         var experiment = $('body').hasClass('a') ? 'a' : 'b';
         var parentclass = $(this).parent().attr('class') ? $(this).parent().attr('class').split(/\s+/).join('-') : '';
         $.post( '" . '/wp-admin/admin-ajax.php' . "', { action: 'increment_clicks', element: parentclass, test: experiment } );       
         if ( target == '_blank' ) {
            window.open(url);
         } else {
            window.location = url;
         }
      });
   " );
}
 
add_action( 'wp_ajax_increment_clicks', 'wbmz_increment_clicks' );
add_action( 'wp_ajax_nopriv_increment_clicks', 'wbmz_increment_clicks' );
  
function wbmz_increment_clicks() { 
   $element = $_POST['element'];
   $experiment = $_POST['test'];
   $key = base64_encode( $element . '-' . $experiment );
   if ( $clicks = get_option( 'wbmz_splittest_clicks' ) ) {
      $clicks[$key] = isset( $clicks[$key] ) ? (int) $clicks[$key] + 1 : 1;
      update_option( 'wbmz_splittest_clicks', $clicks );      
   } else {
      $clicks = array();
      $clicks[$key] = 1;
      add_option( 'wbmz_splittest_clicks', $clicks, '', 'no' );
   }  
   wp_die();
}

Nu moet de data worden getoond op een eigen pagina in het dashboard

add_action( 'admin_menu', 'wbmz_wp_dashboard_split_test_page', 9999 );
  
function wbmz_wp_dashboard_split_test_page() {
      add_submenu_page( 'tools', 'A/B Split Test', 'A/B Split Test', 'manage_options', 'wbmz-split-test', 'wbmz_page_views_clicks_report', 9999 );
}
 
function wbmz_page_views_clicks_report() {
   $html = '<h2>Split Test Stats</h2>';
   $views_a = get_option( 'wbmz_splittest_views_a' );
   $views_b = get_option( 'wbmz_splittest_views_b' );
   $html .= '<p><b>A Views</b>: ' . $views_a . '</p>';
   $html .= '<p><b>B Views</b>: ' . $views_b . '</p>';
   $html .= '<p><b>Clicks</b>:<ul>';
   if ( $clicks = get_option( 'wbmz_splittest_clicks' ) ) {
      foreach ( $clicks as $key => $value ) {
         $html .= '<li>' . base64_decode( $key ) . ': ' . $value . '</li>';
      }
   }
   $html .= '</ul></p>';   
   echo $html;
}

Geef een reactie 0