我正在使用 php cookie 从插件检索 woocommerce 感谢页面和客户订单详细信息页面的值,它在感谢页面上运行良好,但没有在电子邮件订单详细信息页面上打印任何内容,我该如何解决此问题?
我尝试过使用 php session 获取值,它只打印 10 到 15 分钟的值,之后就不会打印任何内容,任何人都可以帮助我使用 PHP cookie 检索值。
从这里我想获取帖子 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 值:
电子邮件通知,用于此 Hook 上的
emails/email-order-details.php
模板文件:do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text, $email ); ?>
所以在订单表之前。
短信插件:
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"]
感谢任何帮助。
最佳答案
已更新
您应该需要在感谢“已收到订单”页面中获取 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 值:
- 来自订单 ID:
$cookie = get_post_meta( $order_id, '_cookie_ticketidno', true );
- 来自订单对象:
$order->get_meta( '_cookie_ticketidno' );//(在 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 文件中。
对于短信 - 由于这需要订单 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;
代码应该放在插件中的provedores.php文件中,只需在代码中替换:
$_COOKIE["ticketidno"]
作者:
get_post_meta( $_SESSION['ID'], '_cookie_ticketidno', true )
其中 $_SESSION['ID']
(我想并且我希望) 应该是订单 ID。
关于php - 如何获取 Woocommerce 电子邮件通知中的 cookie 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55335639/