如何在 Woocommerce 电子邮件通知中获取 cookie 值?

How to get a cookie value in Woocommerce email notifications?

我正在使用 php cookie 从插件中检索一个值到 woocommerce 谢谢页面和客户订单详细信息页面,它在谢谢页面上工作正常但没有在电子邮件订单详细信息页面上打印任何内容,如何我可以解决这个问题吗?

我尝试使用 php 会话获取值,它只打印 10 到 15 分钟的值,之后它不打印任何东西,任何人都可以帮助我使用 PHP 检索值饼干。

我想从这里获取 Post 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 ); ?>
    

    所以在订购之前 Table.

  2. 短信插件: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"]

感谢任何帮助。

已更新

您应该需要在 thankyou "Order received" 页面中获取 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. 来自订单 ID:$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 文件中继续。


在"Order received"页显示(谢谢):

// 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 - 因为这需要订单 ID,请尝试以下操作,但没有任何保证:

    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'] (我想也希望如此) 应该是 订单 ID