altis/experiments

Altis 用的 Web 实验框架

安装次数: 35,041

依赖: 0

建议者: 0

安全: 0

星标: 11

关注者: 19

分支: 1

开放问题: 7

语言:JavaScript

类型:WordPress 插件

2.4.4 2021-03-17 14:56 UTC

README

Altis 的 Web 实验框架。

功能

该插件目前提供以下内置功能

文章标题 A/B 测试

启用此功能后,您可以直接从文章编辑屏幕创建文章标题的 A/B 测试。

默认启用,但可以使用以下过滤器禁用:

add_filter( 'altis.experiments.features.titles', '__return_false' );

默认支持文章和页面,但您可以使用以下代码在插件或主题的 functions.php 中添加对自定义文章类型的支持:

add_post_type_support( 'events', 'altis.experiments.titles' );

用法

该插件提供了一个程序性 API 来注册针对文章数据的自定义 A/B 测试

register_post_ab_test( string $test_id, array $options )

设置测试。

  • $test_id: 测试的唯一 ID。
  • $options: 测试的配置选项。
    • label <string>: 人类可读的标签。
    • rest_api_variants_field <string>: 变体可用的字段名称。
    • rest_api_variants_type <string>: 变体的数据类型。
    • goal <string>: 转化目标事件名称,例如 "click" 或 "click:.selector a"。
    • goal_filter <string | callable>: Elasticsearch bool 查询以筛选目标结果。如果传递了可调用项,则它接收测试 ID 和文章 ID 作为参数。
    • query_filter <string | callable>: Elasticsearch bool 查询以筛选正在查询的总事件。如果传递了可调用项,则它接收测试 ID 和文章 ID 作为参数。
    • variant_callback <callable>: 可选的回调,用于根据变体值进行渲染。参数
      • $value <mixed>: 变体值。
      • $post_id <int>: 文章 ID。
      • $args <array>: 传递给 output_ab_test_html_for_post() 的可选参数。
    • winner_callback <callable>: 可选的回调,用于在找到获胜者时更新文章。默认为 no-op。参数
      • $post_id <int>: 文章 ID。
      • $value <mixed>: 获胜的变体值。
    • post_types <array>: 支持测试的文章类型数组。

output_ab_test_html_for_post( string $test_id, int $post_id, string $default_content, array $args = [] )

返回客户端处理的 A/B 测试标记。

  • $test_id: 测试的唯一 ID。
  • $post_id: 测试的文章 ID。
  • $default_content: 不在测试中的用户的默认内容。
  • $args: 传递给 variant_callback 的可选数据数组。
namespace Altis\Experiments;

// Register the test.
register_post_ab_test( 'featured_images', [
	'rest_api_variants_type' => 'integer',
	'goal' => 'click',
	'variant_callback' => function ( $attachment_id, $post_id, $args ) {
		return wp_get_attachment_image(
			$attachment_id,
			$args['size'],
			false,
			$args['attr']
		);
	}
] );

// Apply the test by filtering some standard output.
add_filter( 'post_thumbnail_html', function ( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
	return output_ab_test_html_for_post( 'featured_images', $post_id, $html, [
		'size' => $size,
		'attr' => $attr,
	] );
}, 10, 5 );

目标跟踪

转化目标是确定变体是否成功的方法。这计算为 转化次数 / 展示次数

提供了开箱即用的 click 目标处理程序,并将点击事件处理程序添加到最近的 <a> 标签。

范围事件处理

对于渲染更复杂替代 HTML 的测试,您可以使用传递给 element.querySelectorAll() 的 CSS 选择器定义事件目标。

例如,将目标设置为 click:.my-target 将在匹配 .my-target 的变体 HTML 元素被点击时跟踪转化。这适用于所有注册的目标处理程序。

自定义目标处理程序

您可以使用JavaScript自定义目标处理器

Altis.Analytics.Experiments.registerGoal( name <string>, callback <function>, closest <array> )

此函数添加一个目标处理器,其中 name 与注册A/B测试时 $options['goal'] 的值相对应

回调函数接收以下参数

  • element <HTMLElement>:事件的目标节点。
  • record <function>:接收目标元素和用于记录转换的回调函数。该函数接受两个可选参数
    • attributes <object>:与事件一起记录的自定义属性。
    • metrics <object>:与事件一起记录的自定义指标。

closest 参数允许您确保传递给回调函数的元素是某种类型,通过在DOM树中向上遍历实现,例如,要仅返回锚标签,则传递 [ 'a' ]

Altis.Analytics.Experiments.registerGoal( 'scrollIntoView', function ( element, record ) {
	var listener = function () {
		// Check element has come into view or not.
		if ( element.getBoundingClientRect().top > window.innerHeight ) {
			return;
		}

		// Remove event listener immediately.
		window.removeEventListener( 'scroll', listener );

		// Record event.
		record();
	};

	// Start listening to scroll events.
	window.addEventListener( 'scroll', listener );
} );

注意:此JavaScript应通过 wp_enqueue_scripts 动作在 <head> 中排队。

创建您自己的测试

您如何管理变体数据取决于您,例如,您可以使用Fieldmanager或Advanced Custom Fields创建元框以保存变体数据。

注意您应该使用以下函数获取和更新变体

get_ab_test_variants_for_post( string $test_id, int $post_id ) : array

update_ab_test_variants_for_post( string $test_id, int $post_id, array $variants )

路线图

  • 多变量测试功能
  • 功能
    • 特色图像测试

Human Made 制作