Есть много способов извлекать данные с постов и страниц сайта. Чаще всего — это с помощью 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, то он поможет отслеживать действия зарегистрированных пользователей. Подробней об этом было написано здесь.
Поделиться ссылкой: