我想通过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的内容
答案 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'设置另一个选项并存储页面被访问的次数...然后执行快速计算计数,知道何时在两个功能之间切换......