Мне нужно захватить переменную для отслеживания рефереров по входящему URL и добавить ее к заказу в WordPress / WooCommerce. В настоящее время в файле темы header.php у меня есть:
if(!empty($_GET['refID'])) $_SESSION['refID'] = $_GET['refID'];
Затем в моем файле functions.php темы:
if(!empty($_SESSION['refID'])) $rID = $_SESSION['refID'];
else $rID = "no var set";
add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta', 10, 2 );
function my_add_order_meta( $order_id, $rID ) {
update_post_meta( $order_id, 'refID', $rID );
}
Переменная сеанса появляется в сеансе WP, но после ее публикации в порядке ничего не появляется. У меня очень мало опыта работы с WP / woocommerce, и я хотел бы знать, является ли это правильным методом для этого?
Вы устанавливаете переменную сеанса, но не используете ее … Я считаю, что ваша функция должна выглядеть примерно так:
add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta' );
function my_add_order_meta( $order_id ) {
// Get the stored refID
$refID = isset( $_SESSION['refID'] ) ? $_SESSION['refID'] : null;
// Update the refID meta
update_post_meta( $order_id, 'refID', $refID );
}
По какой-то неизвестной причине переменная не передавалась из сеанса в $ rID. Используя фактическую переменную сеанса, функция теперь проводит дополнительные данные в заказ. Я также заменил $ rID на $, размещенный в вызове функции:
add_action( 'woocommerce_checkout_update_order_meta', 'my_add_order_meta', 10, 2 );
function my_add_order_meta( $order_id, $posted ) {
update_post_meta($order_id, 'refID', $_SESSION['refID']);
}