Как получить значение cookie в почтовых уведомлениях Woocommerce? - PullRequest
1 голос
/ 25 марта 2019

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

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

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

  <?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"]

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

1 Ответ

2 голосов
/ 25 марта 2019

Обновлено

Вам необходимо получить значение 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;

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

$_COOKIE["ticketidno"]

по:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...