Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 82 additions & 24 deletions includes/pixel.php
Original file line number Diff line number Diff line change
@@ -1,63 +1,83 @@
<?php
/**
* Tracking mechanism for the tracking pixel.
*/

// function to get the title of the referring url

/**
* Given a URL, try to get the <title>.
*
* @param String $url The URL to find a <title></title>.
* @return void|String The contents of <title></title>.
*/
function wprtt_get_referring_page_title( $url ) {

$response = wp_remote_get( $url );
$args = array(
'redirection' => 1,
'headers' => array(
'Referer' => '',
),
);

$response = wp_remote_get( $url, $args );

// if there was no issue grabbing the url, continue
// if there was no issue grabbing the url, continue.
if ( ! is_wp_error( $response ) ) {

// find the title element inside of the response body
// find the title element inside of the response body.
$response = preg_match( '/<title.[^>]*>(.*)<\/title>/siU', $response['body'], $title_matches );

// if a title element was found, let's get the text from it
// if a title element was found, let's get the text from it.
if ( $title_matches ) {

// clean up title: remove EOL's and excessive whitespace.
$title = preg_replace( '/\s+/', ' ', $title_matches[1] );
$title = trim( $title );
$title = rawurlencode( $title );

// return our found title
// return our found title.
return $title;

// if there were no title matches found, don't continue
} else {

// if there were no title matches found, don't continue.
} else {
return;

}
}

}

if ( isset( $_GET['post'] ) ) {

// set up all of our post vars we want to track
// set up all of our post vars we want to track.
$shared_post_id = absint( $_GET['post'] );
$shared_post = get_post( $shared_post_id );

$shared_post_slug = rawurlencode( $shared_post->post_name );
$shared_post_permalink = get_permalink( $shared_post_id );

$url = '';
$url_title = '';
$url_host = '';

if ( array_key_exists( 'HTTP_REFERER', $_SERVER ) ) {

if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
$url = esc_url_raw( $_SERVER['HTTP_REFERER'] );
}

$url_title = wprtt_get_referring_page_title( $url );
$url_title = str_replace( ' ', '%20', $url_title );

$url_host = parse_url( $url, PHP_URL_HOST );
$url_path = parse_url( $url, PHP_URL_PATH );
if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
$url = esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) );
}

} else {
if ( ! empty( $url ) ) {
$url_host = wp_parse_url( $url, PHP_URL_HOST );
$url_path = wp_parse_url( $url, PHP_URL_PATH );

$url = '';
$url_title = '';
$url_host = '';
// Try to get the page title.
$url_title = wprtt_get_referring_page_title( $url );
$url_title = str_replace( ' ', '%20', $url_title );

}

Expand All @@ -66,18 +86,56 @@ function wprtt_get_referring_page_title( $url ) {
exit;
}

$value = get_post_meta( $shared_post_id, 'republication_tracker_tool_sharing', true );
if ( $value ) {
if ( isset( $value[ $url ] ) ) {
$value[ $url ]++;
// Avoid tracking hits that have no site to track.
if ( ! empty( $url ) && ! empty( $url_host ) ) {

$value = get_post_meta( $shared_post_id, 'republication_tracker_tool_sharing', true );
if ( $value ) {
if ( isset( $value[ $url ] ) ) {
$value[ $url ]++;
} else {
$value[ $url ] = 1;
}
} else {
$value[ $url ] = 1;
$value = array(
$url => 1,
);
}
$update = update_post_meta( $shared_post_id, 'republication_tracker_tool_sharing', $value );

// if our google analytics tag is set, let's push data to it.

if ( isset( $_GET['ga'] ) && ! empty( $_GET['ga'] ) ) {

// our base url to ping GA at.
$analytics_ping_url = "https://www.google-analytics.com/collect?v=1";

// create all of our necessary params to track
// the docs for these params can be found at: https://developers.google.com/analytics/devguides/collection/analyticsjs/events
$analytics_ping_params = array(
'tid' => sanitize_text_field( wp_unslash( $_GET['ga'] ) ),
'cid' => '555',
't' => 'pageview',
'dl' => $shared_post_permalink,
'dh' => $url_host,
'dp' => $shared_post_slug,
'dr' => $url,
'dt' => $url_title,
'an' => 'Republication',
'aid' => $url_host,
'av' => 'Republication Tracker v1',
);

// create query based on our params array.
$analytics_ping_params = http_build_query( $analytics_ping_params );

$response = wp_remote_post( $analytics_ping_url . '&' . $analytics_ping_params );
}
} else {
$value = array(
$url => 1,
);
}
}
$update = update_post_meta( $shared_post_id, 'republication_tracker_tool_sharing', $value );

// if our google analytics tag is set, let's push data to it
Expand Down