Как получить значение cookie в уведомлениях по электронной почте Woocommerce?

Я получаю значение с помощью файлов cookie php из плагина для страницы благодарности woocommerce и страницы сведений о заказе клиента, она отлично работает на странице благодарности, но ничего не печатает на странице сведений о заказе по электронной почте, как я могу это исправить?

Я пробовал получать значения с помощью сеансов php, он печатает значение только в течение 10-15 минут, после чего ничего не печатает, может ли кто-нибудь помочь мне получить значения с помощью PHP cookie.

Отсюда я хочу получить идентификатор сообщения

  <?php
  if('on' == $display_ticket_number){
        echo '#' . $post->ID . ' ';
  }

  echo $post->post_title; 

 $ticketid = $post->ID; 
 setcookie ("ticketidno",$ticketid, time() +60, "/");  
 ?>

На thankyou.php выводится значение

<?php echo $_COOKIE["ticketidno"];?>

email-order-details.php здесь не печатается

<?php echo $_COOKIE["ticketidno"];?>

Изменить

Я хочу получить и отобразить значение cookie для:

  1. Уведомление по электронной почте, для emails/email-order-details.php файла шаблона на этом крючке:

    do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text, $email ); ?>
    

    Итак, перед таблицей заказов.

  2. Плагин текстовых SMS: plugins/woocommerce-apg-sms-notifications/includes/admin/proveedores.php

    case "solutions_infini":
        $respuesta = wp_remote_get( "http://api-global.solutionsinfini.com/v3/?api_key=" . $apg_sms_settings['clave_solutions_infini'] . "&method=sms" . "&to=" . $telefono . "&sender=" . $apg_sms_settings['identificador_solutions_infini'] . "&message=" . "Thanks for Registering in ". $_SESSION['post_title'] . " your Registration ID no is THR". $_COOKIE["ticketidno"] . apg_sms_codifica_el_mensaje( $mensaje ));
        break;
    

Замена $_COOKIE["ticketidno"]

Любая помощь приветствуется.


person Sanad Qazi    schedule 25.03.2019    source источник
comment
На вашем месте я бы использовал переменную сеанса, потому что файлы cookie могут быть отключены пользователем. В этом случае вся ваша функция работать не будет. Возможно, есть еще что-то, что удаляет файлы cookie. Так что попробуйте с $ _SESSION ['']   -  person Mr. Jo    schedule 25.03.2019
comment
Я пробовал получать значения с помощью сеансов php, он печатает значение только от 10 до 15 минут, после чего ничего не печатает.   -  person Sanad Qazi    schedule 25.03.2019
comment
Итак, есть функция или что-то еще, что завершает / очищает ваш сеанс, файлы cookie и все остальное. Кажется зашитым. Может быть все.   -  person Mr. Jo    schedule 25.03.2019


Ответы (1)


Обновлено

Вам необходимо получить значение cookie в качестве метаданных настраиваемого заказа на странице «Заказ получен»:

 add_action( 'woocommerce_thankyou', 'thankyou_grab_cookie_as_meta_data', 10, 1 );
function thankyou_grab_cookie_as_meta_data( $order_id ){
    if( ! $order_id ){
        return;
    }

    if( isset($_COOKIE["ticketidno"]) && ! get_post_meta( $order_id, '_cookie_ticketidno', true ) ) {
        update_post_meta( $order_id, '_cookie_ticketidno', esc_attr($_COOKIE["ticketidno"]) );
    }
}

Код размещается в файле function.php вашей активной дочерней темы (или активной темы). Должно сработать.

Вы сможете получить это полученное значение cookie, используя:

  1. Из идентификатора заказа: $cookie = get_post_meta( $order_id, '_cookie_ticketidno', true );
  2. Из объекта заказа: $order->get_meta( '_cookie_ticketidno' ); // (on Woocommerce 3+)

Отображать в уведомлениях по электронной почте:

// Email notifications display
add_action( 'woocommerce_email_order_details', 'add_order_instruction_email', 5, 4 );
function add_order_instruction_email( $order, $sent_to_admin, $plain_text, $email ) {
    if( $value = $order->get_meta('_cookie_ticketidno') )
        echo '<p class="ticket-id">' .__('Ticket Id Number: ') . $value . '</p>';
}

Код размещается в файле function.php вашей активной дочерней темы (или активной темы).


Отображение на странице «Заказ получен» (спасибо):

// On "Order received" page (on start)
add_filter( 'woocommerce_thankyou_order_received_text', 'thankyou_custom_order_received_text', 10, 2 );
function thankyou_custom_order_received_text( $text, $order ) {
    if ( $value = $order->get_meta('_cookie_ticketidno') ) {
        $text .= '<br><div class="ticket-id"><p>' . __('Ticket Id Number: ') . $value . '</p></div>' ;
    }
    return $text;
}

Код размещается в файле function.php вашей активной дочерней темы (или активной темы).


Для SMS - поскольку для этого требуется идентификатор заказа, попробуйте без каких-либо гарантий сделать следующее:

    case "solutions_infini":

        $respuesta = wp_remote_get( "http://api-global.solutionsinfini.com/v3/?api_key=" . $apg_sms_settings['clave_solutions_infini'] . "&method=sms" . "&to=" . $telefono . "&sender=" . $apg_sms_settings['identificador_solutions_infini'] . "&message=" . "Thanks for Registering in ". $_SESSION['post_title'] . " your Registration ID no is THR". get_post_meta( $_SESSION['ID'], '_cookie_ticketidno', true ) . apg_sms_codifica_el_mensaje( $mensaje ));
        break;

Код должен находиться в файле proofedores.php в вашем плагине, просто заменив в коде:

$_COOKIE["ticketidno"]

by:

get_post_meta( $_SESSION['ID'], '_cookie_ticketidno', true )

где $_SESSION['ID'] (я полагаю и надеюсь) должен быть идентификатором заказа.

person LoicTheAztec    schedule 25.03.2019
comment
Я пробовал и то, и другое, но он ничего не печатает даже на странице thankyou.php. - person Sanad Qazi; 25.03.2019
comment
Как я вижу, значения сохраняются в таблице базы данных wp_postmeta в _cookie_ticketidno meta_key, но я не могу распечатать их на любой странице с заданными кодами. Вы можете помочь мне распечатать? - person Sanad Qazi; 25.03.2019
comment
Первый код работает для меня, второй код не сохраняет значение в базе данных. Я хочу напечатать на двух страницах: 1. wp-content / plugins / woocommerce / templates / emails / email-order-details.php 2). wp-content / plugins / woocommerce-apg-sms-notifications / includes / admin / proofedores.php Второй - для текста SMS. - person Sanad Qazi; 25.03.2019