Извлечение данных из сайта на CMS WordPress в dataLayer

 

Есть много способов извлекать данные с постов и страниц сайта. Чаще всего — это с помощью CSS-селекторов, мета-тегов, data-атрибутов и прочих инструментов.

Но в WordPress, как и во многих других CMS, можно также извлекать данные из собственных массивов и переменных, которые используются для вывода контента постов и страниц.

В данной статье рассмотрим извлечение данных из массивов и переменных в шаблонах WordPress и передачу этих данных в dataLayer.

Будем разбирать извлечение стандартных данных постов, страниц, рубрик, тегов, пользователей, архивов и поиска.

Получаем массивы данных с помощью функций:

  • для постов и страниц — $post = get_post();
  • для рубрик — $category = get_the_category();
  • для тегов — $posttags = get_the_tags();
  • для пользователей (текущего пользователя) — $current_user = wp_get_current_user();

Объявим переменную $paged для пагинации, которая позволит отслеживать номер страницы в списке постов:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Также, для вывода некоторых значений будем использовать некоторые функции:

  • single_post_title(», true) — заголовок поста;
  • the_title() — заголовок страницы;
  • get_the_author_meta( ‘display_name’ ) — автор поста или страницы;
  • get_author_posts_url( get_the_author_meta( ‘ID’ ) ) — URL автора поста или страницы (написанные им посты);
  • get_the_date() — форматированная дата и время публикации поста;
  • the_permalink() — URL поста или страницы;
  • get_page_uri() — ярлык поста;
  • the_ID() — id поста или страницы;
  • the_archive_title( », » ) — название выводимого архива;
  • printf( esc_html__( ‘Search Results for: %s’, ‘themeName’ ), get_search_query() ) — вывод запроса в результатах поиска посетителя

Выводить значения будем ещё с помощью массивов данных и ключей:

  • $category[0]->name — рубрика поста;
  • $category[0]->term_id — id рубрики поста;
  • $category[0]->slug — ярлык рубрики поста;
  • $post->post_author — id автора поста или страницы;
  • $post->post_date — дата публикации поста или страницы;
  • $post->post_modified — дата последнего редактирования поста или страницы;
  • $post->guid — ссылка на пост или страницу

Чтобы получить список тегов на пост, необходимо обойти массив методом foreach:

<?php if ($posttags) { foreach($posttags as $tag) { echo $tag->name . ', '; } } ?>

Таким образом, получим список тегов для поста через запятую.

Ещё можно вытащить данные о зарегистрированном пользователе через массив $current_user

  • $current_user->data->ID — id пользователя;
  • $current_user->data->user_registered — дата регистрации пользователя;
  • $current_user->data->user_url — URL пользователя на сайте

Также есть такие значения пользовательских данных, как $current_user->data->user_login, $current_user->data->user_email, $current_user->data->user_nicename, $current_user->data->display_name, но отправлять их напрямую в системы аналитики нельзя, так как это запрещено политикой конфиденциальности Google.

Для того, чтобы передавать определённые данные в dataLayer, необходимо вставить их в шаблоны вашего сайта.

Для передачи данных о просматриваемых постах в шаблоне, отвечающем за вывод полного поста — обычно это single.php, где-нибудь в конце файла вставляем примерно такой код:

 

<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({
<?php 
	$category = get_the_category();
	$post = get_post();
	$posttags = get_the_tags();
?>
		'event': 'post_view',
		'post_title': '<?php single_post_title('', true); ?>',
		'post_category': '<?php echo $category[0]->name; ?>',
		'post_category_id': '<?php echo $category[0]->term_id; ?>',
		'post_category_page': '<?php echo $category[0]->slug; ?>',
		'post_tags': '<?php if ($posttags) { foreach($posttags as $tag) { echo $tag->name . ', '; } } ?>',
		'post_author': '<?php echo get_the_author_meta( 'display_name' ); ?>',
		'post_author_id': '<?php echo $post->post_author; ?>',
		'post_author_url': '<?php echo get_author_posts_url( get_the_author_meta( 'ID' ) ); ?>',
		'post_date_formatted': '<?php echo get_the_date(); ?>',
		'post_date': '<?php echo $post->post_date; ?>',
		'post_modified': '<?php echo $post->post_modified; ?>',
		'post_url': '<?php the_permalink(); ?>',
		'post_page': '<?php echo get_page_uri(); ?>',
		'post_link': '<?php echo $post->guid; ?>',
		'post_id': '<?php the_ID(); ?>'
	});
</script>

В результате получим:

Для передачи данных о просматриваемых страницах в шаблоне, отвечающем за вывод страницы — обычно это page.php, где-нибудь в конце файла вставляем примерно такой код:

<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({
<?php 
	$post = get_post();
	$posttags = get_the_tags();
?>
		'event': 'page_view',
		'page_title': '<?php the_title(); ?>',
		'page_url': '<?php the_permalink() ?>',
		'page_link': '<?php echo $post->guid; ?>',
		'page_id': '<?php the_ID(); ?>',
		'page_author': '<?php echo get_the_author_meta( 'display_name' ); ?>',
		'page_author_id': '<?php echo $post->post_author; ?>',
		'page_author_url': '<?php echo get_author_posts_url( get_the_author_meta( 'ID' ) ); ?>',
		'page_date_formatted': '<?php echo get_the_date(); ?>',
		'page_date': '<?php echo $post->post_date; ?>',
		'page_modified': '<?php echo $post->post_modified; ?>'
});
</script>

В результате получим:

В листинге архива в файле archive.php где-нибудь после строки

<?php if ( have_posts() ) : ?>

вставляем следующий код:

<? $archive_title = get_the_archive_title(); ?>
<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({ 'event': 'listing', 'list': '<?php echo wp_filter_nohtml_kses( $archive_title ); ?>', 'page_number': '<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; echo $paged; ?>' });
</script>

В результате получим:

В листинге результатов поиска в файле search.php также после строки

<?php if ( have_posts() ) : ?>

вставляем следующий код:

<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({ 'event': 'listing', 'list': '<?php printf( esc_html__( 'Search Results for: %s', 'themeName' ), get_search_query() ); ?>', 'page_number': '<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; echo $paged; ?>' });
</script>

В результате получим:

И, наконец, где-нибудь в шапке в файле header.php вставим код с пользовательскими данными:

<?php if (!empty(wp_get_current_user()->data->ID)) { ?>
<?php
	$current_user = wp_get_current_user();
?>
<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({
		'user_id': '<?php echo $current_user->data->ID; ?>',
		'user_reg_date': '<?php echo $current_user->data->user_registered; ?>',
		'user_url': '<?php echo $current_user->data->user_url; ?>'
	});
</script>
<?php } else echo ''; ?>

Принцип работы этого скрипта прост: после того, как посетитель логинится на сайте, он ловит свой id. Данный скрипт проверяет, приклеился ли id или нет. Если id есть, тогда он выводит весь код, если нет — он его прячет (не выводит).

В результате получаем:

Также этот id можно записать пользователю в cookie-файл. Скрипт тогда будет выглядеть следующим образом:

<?php if (!empty(wp_get_current_user()->data->ID)) { ?>
<?php
	$current_user = wp_get_current_user();
?>
<script type="text/javascript">
    document.cookie = "userID=<?php echo $current_user->data->ID; ?>; path=/";
</script>
<script>
	var dataLayer = window.dataLayer || [];
	dataLayer.push({
		'user_id': '<?php echo $current_user->data->ID; ?>',
		'user_reg_date': '<?php echo $current_user->data->user_registered; ?>',
		'user_url': '<?php echo $current_user->data->user_url; ?>'
	});
</script>
<?php } else echo ''; ?>

И если в Google Analytics включить функцию User ID, то он поможет отслеживать действия зарегистрированных пользователей. Подробней об этом было написано здесь.

Поделиться ссылкой:

 

Читайте также