在wordpress中进行A / B测试

时间:2014-10-16 16:08:19

标签: php wordpress

我想通过A / B测试在wordpress中实现登录页面。

因此,每个着陆页应该有两个版本A和B.因此,如果您访问着陆页,则应该在50%的情况下获得版本A,而在其他50%的情况下应该获得版本B.

因此,在100次访问中,50次应该提供给版本A,50次应该提供给版本B.当然,一个URL应该提供给两个版本。

我从这开始:

我有两种自定义帖子类型:“landing-main”和“landing-versions”。

主页面将保存为“landing-main”帖子类型,并将包含后期元字段,其中包含A和B版本的ID。 A和B版本将两个不同的帖子保存为“登陆版”自定义帖子类型。

所以我创建了版本A和版本B:

$args = array(
  'post_title'    => 'Version A',
  'post_content'  => 'Content of Version A',
  'post_status'   => 'publish', 
  'post_type'     => 'landing-versions',
 );

 $versionA_ID = wp_insert_post($args);

$args = array(
  'post_title'    => 'Version B',
  'post_content'  => 'Content of Version B',
  'post_status'   => 'publish', 
  'post_type'     => 'landing-versions',
 );

 $versionB_ID = wp_insert_post($args);

然后创建主帖:

$args = array(
  'post_title'    => 'Main Post',
  'post_content'  => '',
  'post_status'   => 'publish', 
  'post_type'     => 'landing-main',
 );

 $main_ID = wp_insert_post($args);

然后添加post meta以保存主帖的版本A和B:

add_post_meta($main_ID, 'first_version', $versionA_ID);
add_post_meta($main_ID, 'second_version', $versionB_ID);

现在假设主帖的网址为:

www.mysite.com/?p=1

当你想要这个网址时我想要50%显示版本A的内容和50%版本B的内容:

所以我将在conntent上添加钩子:

add_filter( 'the_content', 'changePostContent');

function changePostContent($content){
    global $post;
    if($post->post_type == 'landing-main'){

        $versionA_ID =get_post_meta($post->ID,'first_version',true);
        $versionB_ID =get_post_meta($post->ID,'second_version',true);

        $versionA = get_post($versionA_ID);
        $versionB = get_post($versionB_ID);

        $versionA_Content = $versionA->post_content;
        $versionB_Content = $versionB->post_content;

        // in 50% return $versionA_Content;
        // in 50% return $versionB_Content;
    }
}

所以有人知道如何实现这个部分,在50%的版本A返回内容和50%返回版本B的内容。或者这可以改变,例如:在70%返回版本A的内容和30%返回版本B的内容。因此,在100次访问中,70次应该提供版本的内容,而在其他30%应该返回版本B的内容

2 个答案:

答案 0 :(得分:0)

从未尝试过这个,但我在这里回答:

我是if (rand(0,1)) { showA(); } else { showB(); }上方第一条评论的粉丝,但您已经表示过于随机。

您可以设置一个选项,以便每次点击该网站时都会显示另一个页面,并使用Cookie来防止用户在点击其后退按钮时获得不同的页面。以下示例使用函数landing_page()接受页面作为参数。

if(isset($_COOKIE['landing_page'])) {
    landing_page( $_COOKIE['landing_page'] );
}
else {
  $landing_page = get_option( 'landing_page');

  if ( $landing_page == 'a') {
      landing_page( 'b' );
      update_option( 'landing_page', 'b' );
      setcookie('landing_page' ,'b',time()+3600*24*30 );
  } 
  else {
      landing_page( 'a' );
      update_option( 'landing_page', 'a' );
      setcookie('landing_page' ,'a',time()+3600*24*30 );
  }
 }

答案 1 :(得分:0)

您应该使用数据库变量来获得50%......

$which_page = get_option( 'which_page', '' );
// Catch for the first time the script is ever run...
if( empty( $which_page ) ) {
    update_option( 'which_page', 'show_b' );
    show_a();
// Catch to call show_a() function
}elseif( $which_page == 'show_a' ) {
    update_option( 'which_page', 'show_b' );
    show_a();
// Catch to call show_b() function
}else {
    update_option( 'which_page', 'show_a' );
    show_b();
}

如果您需要将其更改为70%/ 30%(或其他),那么您需要为'which_page_count'设置另一个选项并存储页面被访问的次数...然后执行快速计算计数,知道何时在两个功能之间切换......