広告側で出し分けの設定を行う場合はURLを変更する必要がある。
たとえば、トップページと固定ページのメインビジュアルの変えたものをBパターンとして作成する場合、以下で完結するが、うまくいかない場合がある。

add_rewrite_endpoint( 'p2', EP_ROOT | EP_PAGES );

それは表示設定の「投稿ページ」に固定ページが設定されているときで、この場合はトップページが投稿ページのアーカイブページを指すことになる。

この構成になっている場合は、EP_ROOTを使用するのをやめて自前でリライトルールを書き換える必要がある。

add_rewrite_endpoint( 'p2', EP_PAGES );
add_filter( 'template_include', function ( $template ) {
  if( get_query_var( 'p2', false ) !== false && ! is_singular( 'page' ) ) {
    $template = locate_template( 'front-page.php' );
  }
  return $template;
}, 99, 1);
add_filter( 'query_vars', function ( $vars ) {
  $vars[] = 'p2';
  return $vars;
} );
add_action( 'init', function () {
  add_rewrite_rule( '^p2/?$', 'index.php?&p2=1', 'top' );
} );
add_action( 'pre_get_posts', function ( $query ) {
  if ( ! is_admin() && $query->is_main_query() && get_query_var( 'p2', false ) !== false && ! is_singular( 'page' ) ) {
    $query->set( 'page_id', get_option( 'page_on_front' ) );
    $query->is_page = true;
    $query->is_home = true;
    $query->is_singular = true;
    $query->is_front_page = true;
  }
} );
remove_action( 'template_redirect', 'redirect_canonical' );

メインクエリを書き換えているが、これをしない場合、テンプレートはfront-page.phpを表示しているが中身が入ってこないことになるため注意する。

そして、headタグ内にカノニカルタグを追加する。

add_action( 'wp_head', function () {
  if ( get_query_var( 'p2', false ) !== false ) {
    echo '<link rel="canonical" href="' . get_permalink() . '" />';
  }
} );

なお、Bパターンにアクセスしたユーザーに対して、AパターンのURL(正規URL)にリダイレクトさせずに、Cookieを利用して常にBパターンの表示にする場合は以下のようにする。

function is_pattern_2 () {
  if ( get_query_var( 'p2', false ) !== false || ( isset( $_COOKIE[ 'use_pattern' ] ) && $_COOKIE[ 'use_pattern' ] === 'p2' ) ) {
    return true;
  } else {
    return false;
  }
}
add_rewrite_endpoint( 'p2', EP_PAGES );
add_filter( 'template_include', function ( $template ) {
  if ( is_pattern_2() && ( ! isset( $_COOKIE[ 'use_pattern' ] ) || $_COOKIE[ 'use_pattern' ] !== 'p2' ) ) {
    $cookie_name = 'use_pattern';
    $cookie_value = 'p2';
    $expiry_time = time() + (86400 * 30); // 30日間有効の場合
    setcookie( $cookie_name, $cookie_value, $expiry_time, '/', '', true, true );
  }
  if ( isset( $_GET[ 'reset-pattern' ] ) ) { // Cookieリセット用
    setcookie( 'use_pattern', '', time() - 3600, '/', '', true, true );
  }
  if ( is_pattern_2() && ! is_singular( 'page' ) && is_front_page() ) {
    // is_front_page() を指定しているのは search.php が反応しないようにするため
    $template = locate_template( 'front-page.php' );
  }
  return $template;
}, 99, 1);
add_filter( 'query_vars', function ( $vars ) {
  $vars[] = 'p2';
  return $vars;
} );
add_action( 'init', function () {
  add_rewrite_rule( '^p2/?$', 'index.php?&p2=1', 'top' );
} );
add_action( 'pre_get_posts', function ( $query ) {
  if ( ! is_admin() && $query->is_main_query() && is_pattern_2() && ! is_singular( 'page' ) && is_home() ) { // この条件はサイト構成によって変更する
    $query->set( 'page_id', get_option( 'page_on_front' ) );
    $query->is_page = true;
    $query->is_home = true;
    $query->is_singular = true;
    $query->is_front_page = true;
  }
} );
remove_action('template_redirect', 'redirect_canonical');
add_action( 'wp_enqueue_scripts', function () {
  if ( is_pattern_2() ) {
    wp_enqueue_style( 'style2', get_theme_file_uri( '/css/pattern2.css' ), [ 'style' ], '1.0.0' );
  }
} );

なおこれを実装する際に、PHPの$_COOKIEが取得できない場合があったが、ブラウザにCookieが保存されているのであれば、サーバーの設定を見直すと良い。
当方の場合、サーバーキャッシュが原因であった。
有名どころだと、WPXサーバーではCookieの値でキャッシュを無効にできる設定があるので、上のサンプルの場合は「use_pattern」を指定すると望み通りに動いた。