UTM mogelijkheden werken niet op nieuwe WP installaties
-
Beste ontwikkelaars,
Ik zit al een tijdje met een probleem, en dat is dat op alle nieuwe WordPress installaties UTM acties niet werken. Wij moeten dus een custom link aanmaken, deze geven wij door aan een specifieke klantengroep zodat wij onze bestellingen kunnen tracken op doelgroep. Omdat ik zelf al iets had geschreven;
Een tracking ID bijvoorbeeld: https://b1q.nl/?tracking_id=testcode *(test website waar het niet op werkt), zodra men via deze link binnenkomt en er wordt tot slot een order gedaan, dan zou er bij WooCommerce > Orders > Bij de klantinformatie het Unieke ID moeten staan.Dit gaat goed op een eerder gemaakte website uit 2021. Hierbij heb ik wel alle updates gelijk getrokken naar de nieuwste versies.
Uitgevoerde troubleshoot:
- Beide websites (2021, nu) geupdated na de laatste versies WooCommerce, WordPress, Thema updates etc.
- Aangezien het op de oude versie WordPress wel werkte dacht ik dat het server gebonden kon zijn, aangezien de oude website op een andere VPS staat bij een andere partij.
- De oude WordPress 2021 website waar het wel op werkte gemigreerd naar mijn andere VPS, waar dus ook de nieuwe WordPress installatie op staat en waar het dus niet op werkt. De 2021 website werkt qua UTM functionaliteit hier ook prima, tot mijn verbazing!
- Ook voor de zekerheid PHP settings gelijk gezet, PHP waarden etc.
- Caching volledig uitgeschakeld, ook in Cloudflare. Echter zou dit niet uit moeten maken aangezien het op sandbox.dewebdeveloper.nl wel werkt, dus de 2021 website zeg maar.
- Alle methodes geprobeerd, sessions, javascript icm ajax, cookies etc. maar niets lijkt te werken.
- Functions.php gecontroleerd (aangezien we ons eigen child theme hebben)
- Overige scripts en snippets grondig doorzocht
- Alle plugins uitzetten behalve de noodzakelijke, en deze staan dus op beide sites gelijk en beschikken over de zelfde versie
- Permalinks gelijk zetten
Even kort samengevat!
Wat mij vreemd lijkt is dat het dus op enkel een oude installatie werkt, ook al is deze oude installatie later naar de nieuwste versies gebracht voor zowel WordPress core, themas, plugins etc. Tevens oude als nieuwe websites gelijk configuraties etc.
Aangezien de oude website ook op dezelfde server werkt qua UTM mogelijkheden moet het echt iets in WordPress zijn.
Om zaken uit te kunnen sluiten hebben we ook de plugin van HandL UTM Grabber van Haktan Suren geprobeerd. Zoals je al raad werkt deze plugin prima op de oude 2021 omgeving terwijl het op meerdere nieuwe WordPress installaties niet werkt. Hiervoor ook extra test servers aangemaakt bij andere hostingproviders zoals Hetzner, AlphaVPS etc om zaken uit te kunnen sluiten.De functie die niet werkt op nieuwe installaties:
Hoofdbestand van mijn plugin
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
// Voeg JavaScript-bestanden toe
function dwsd_enqueue_tracking_scripts() {
// Voeg jQuery toe, als je dat nodig hebt voor je JavaScript
wp_enqueue_script('jquery');
// Voeg je JavaScript-bestanden toe
wp_enqueue_script('dwsd-order-tracking-js', plugin_dir_url(__FILE__) . 'js/order-tracking.js', array('jquery'), null, true);
// Voeg js.cookie.js toe
wp_enqueue_script('js-cookie', plugin_dir_url(__FILE__) . 'js/js.cookie.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'dwsd_enqueue_tracking_scripts');
// Haal het tracking_id uit de URL en sla het op in de sessie en de cookie
function dwsd_tracking_id_capture() {
if( isset( $_GET['tracking_id'] ) && !empty( $_GET['tracking_id'] ) ) {
// Sla het tracking_id op in de sessie
$_SESSION['tracking_id'] = sanitize_text_field( $_GET['tracking_id'] );
// Zet het tracking_id ook in de cookie (voor een duur van 30 dagen)
setcookie( 'tracking_id', sanitize_text_field( $_GET['tracking_id'] ), time() + ( 30 * 24 * 60 * 60 ), COOKIEPATH, COOKIE_DOMAIN );
}
}
add_action( 'wp', 'dwsd_tracking_id_capture' );
// Voeg tracking_id toe aan de bestelling bij het plaatsen van de bestelling
function dwsd_tracking_id_add_to_order( $order_id ) {
// Controleer of het tracking_id in de sessie zit
if ( isset( $_SESSION['tracking_id'] ) && ! empty( $_SESSION['tracking_id'] ) ) {
$tracking_id = sanitize_text_field( $_SESSION['tracking_id'] );
update_post_meta( $order_id, '_tracking_id', $tracking_id );
}
// Als het tracking_id niet in de sessie zit, kijk dan of het in de cookie zit
elseif ( isset( $_COOKIE['tracking_id'] ) && ! empty( $_COOKIE['tracking_id'] ) ) {
$tracking_id = sanitize_text_field( $_COOKIE['tracking_id'] );
update_post_meta( $order_id, '_tracking_id', $tracking_id );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'dwsd_tracking_id_add_to_order' );
// Toon tracking_id op de bestelpagina in het beheer
function dwsd_display_tracking_id_in_order( $order ) {
// Haal de custom ordermeta op
$tracking_id = get_post_meta( $order->get_id(), '_tracking_id', true );
if ( ! empty( $tracking_id ) ) {
echo '<p><strong>' . __( 'Tracking ID:', 'dwsd-order-tracking' ) . '</strong> ' . $tracking_id . '</p>';
}
}
add_action( 'woocommerce_admin_order_data_after_order_details', 'dwsd_display_tracking_id_in_order' );
// Maak de tracking_id zichtbaar op de klantenbevestigingspagina
function dwsd_display_tracking_id_on_order_receipt( $order_id ) {
$order = wc_get_order( $order_id );
$tracking_id = get_post_meta( $order_id, '_tracking_id', true );
if ( ! empty( $tracking_id ) ) {
echo '<p><strong>' . __( 'Your Tracking ID:', 'dwsd-order-tracking' ) . '</strong> ' . $tracking_id . '</p>';
}
}
add_action( 'woocommerce_thankyou', 'dwsd_display_tracking_id_on_order_receipt', 10, 1 );Ook in hoofdmap: gf-order-field.php
<?php
// Voeg hier extra velden toe aan je formulier, bijvoorbeeld voor order ID of tracking URL
function add_order_tracking_field($form) {
// Voeg een nieuw veld toe aan je formulier
$form['fields'][] = array(
'type' => 'text',
'label' => 'Order ID',
'id' => 'order_id',
);
return $form;
}
add_filter('gform_pre_render', 'add_order_tracking_field');
add_filter('gform_pre_validation', 'add_order_tracking_field');
?>Tevens in hoofdmap: order-tracking.php
<?php
// Voeg hier de logica toe om het order ID te verwerken
if (isset($_GET['order_id'])) {
$order_id = sanitize_text_field($_GET['order_id']);
// Verwerk de order ID, bijvoorbeeld opslaan in de database of een API aanroepen
// Dit zou afhangen van wat je precies wilt doen met de orderinformatie
}
?>js/js.cookie.js
// Cookie helper functions (als alternatief voor je bestaande code)
var Cookie = {
set: function(name, value, days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
},
get: function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
};js/order-tracking.js
// Verkrijg het tracking ID uit de URL en sla het op in een cookie
(function() {
var url = window.location.href;
var trackingId = new URL(url).searchParams.get('tracking_id');
if (trackingId) {
// Sla het tracking ID op in een cookie
Cookies.set('tracking_id', trackingId, { expires: 7, path: '/' });
console.log("Tracking ID opgeslagen in cookie: " + trackingId);
}
})();Omgeving waar het wel op werkt: sandbox.dewebdeveloper.nl
Omgeving waar het niet op werkt: b1q.nl
Hoe de tracking URL eruit ziet: /?tracking_id=testcode
Hieronder een screenshot van wat je ziet en niet ziet oude en nieuwe omgeving.
Ik hoop dat ik mijn vraag goed en duidelijk heb omschreven. Mocht er meer info nodig zijn dan deel ik dat graag met jullie.
Alvast bedankt!
- Dit onderwerp is gewijzigd 3 weken, 1 dag geleden door .
- Dit onderwerp is gewijzigd 3 weken, 1 dag geleden door .
- Dit onderwerp is gewijzigd 3 weken, 1 dag geleden door .
De pagina waar ik hulp bij nodig heb: [log in om de link te zien]
- Je moet ingelogd zijn om op dit onderwerp te reageren.