woocommerce 이메일 알림의 get_post_module
woocommerce 이메일 템플릿에서 주문 데이터를 가져오려고 하는데 get_post_meta가 false를 반환합니다.이 코드는 감사 페이지에서 작동합니다.나는 이것에 너무 많은 시간을 할애했다.어떤 도움이라도 주시면 감사하겠습니다.감사합니다!
global $post;
echo "test!!!<br />";
$x = get_post_meta( $order->id, 'attendee_data', true );
$y = get_post_meta( $order->id, 'attendee_test', true );
echo $order->id . '<br />';
echo $x;
echo $y;
sql 사진과 이메일 첨부합니다.
SQL: http://i.stack.imgur.com/zUFBa.png
이메일: http://i.stack.imgur.com/Uqtih.png
전체 이메일 템플릿:
<?php do_action('woocommerce_email_header', $email_heading); ?>
<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>
<?php do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text ); ?>
<h2><?php echo __( 'Order:', 'woocommerce' ) . ' ' . $order->get_order_number(); ?></h2>
<table cellspacing="0" cellpadding="6" style="width: 100%; border: 1px solid #eee;" border="1" bordercolor="#eee">
<thead>
<tr>
<th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Product', 'woocommerce' ); ?></th>
<th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Quantity', 'woocommerce' ); ?></th>
<th scope="col" style="text-align:left; border: 1px solid #eee;"><?php _e( 'Price', 'woocommerce' ); ?></th>
</tr>
</thead>
<tbody>
<?php echo $order->email_order_items_table( $order->is_download_permitted(), true, ( $order->status=='processing' ) ? true : false ); ?>
</tbody>
<tfoot>
<?php
if ( $totals = $order->get_order_item_totals() ) {
$i = 0;
foreach ( $totals as $total ) {
$i++;
?><tr>
<th scope="row" colspan="2" style="text-align:left; border: 1px solid #eee; <?php if ( $i == 1 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['label']; ?></th>
<td style="text-align:left; border: 1px solid #eee; <?php if ( $i == 1 ) echo 'border-top-width: 4px;'; ?>"><?php echo $total['value']; ?></td>
</tr><?php
}
}
?>
</tfoot>
</table>
<?php
global $post;
echo "test!!!<br />";
$x = get_post_meta( $order->id, 'attendee_data', true );
$y = get_post_meta( $order->id, 'attendee_test', true );
echo $order->id . '<br />';
echo $x;
echo $y;
foreach ( $x as $k => $p ) {
echo $k ." ... ". $p;
} ?>
<?php // attendee_order_details($order->get_order_number()) ?>
<?php do_action( 'woocommerce_email_after_order_table', $order, $sent_to_admin, $plain_text ); ?>
<?php do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text ); ?>
<h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2>
<?php if ($order->billing_email) : ?>
<p><strong><?php _e( 'Email:', 'woocommerce' ); ?></strong> <?php echo $order->billing_email; ?></p>
<?php endif; ?>
<?php if ($order->billing_phone) : ?>
<p><strong><?php _e( 'Tel:', 'woocommerce' ); ?></strong> <?php echo $order->billing_phone; ?></p>
<?php endif; ?>
<?php wc_get_template( 'emails/email-addresses.php', array( 'order' => $order ) ); ?>
<?php do_action( 'woocommerce_email_footer' ); ?>
저는 당신의 정보를 바탕으로 몇 가지 테스트를 했고 당신의 문제를 재현하려고 했습니다.
먼저 주문 시 (주문 시) 포스트 메타(attendee_test 및 attendee_data)를 삽입하는 기능을 만들었습니다.woocommerce_checkout_update_order_meta
훅을 걸 수 있습니다).
저는 이걸 제 테마에 넣었어요.functions.php
(값은 입력(db의 이미지)에 따라 달라지며 테스트용일 뿐 동적인 것은 아닙니다).
add_action('woocommerce_checkout_update_order_meta', 'add_meta_values', 2);
function add_meta_values($order_id){
// array with attendee data
$attendee_data = array(
array(
'edit' => 'false',
'company' => 'get',
)
);
add_post_meta( $order_id, 'attendee_data', $attendee_data );
add_post_meta( $order_id, 'attendee_test', 'test' );
}
그리고 다음 코드를 템플릿에 추가했습니다.customer-processing-order.php
:
<?php
$attendee_data = get_post_meta( $order->id, 'attendee_data', true );
$attendee_test = get_post_meta( $order->id, 'attendee_test', true );
echo 'Order ID: ' . $order->id . '<br />';
echo 'Attendee Test: ' . $attendee_test . '<br />';
echo 'Attendee Data:<br />';
foreach ( $attendee_data as $k => $data ) {
foreach ($data as $key => $value){
echo $key . ' .. ' . $value . '<br />';
}
} ?>
보시다시피 좀 더 명확하게 하기 위해 수정했습니다.또한 $attendee_data 루프를 변경했습니다.이것은 완전히 옳지 않다고 생각했기 때문입니다(추가 포어치가 필요).물론 이것은 진짜 문제와 관련이 없다.
테스트 오더를 작성하면 이메일에 다음 데이터가 표시됩니다.
이 결과는 다음과 같은 것을 증명한다.get_post_meta
(Wordpress 4.0.1과 WooCommerce 2.2.10을 사용)는, 상기의 코드에 근거해 E-템플릿으로 동작하고 있습니다.
위의 테스트도 정상적으로 동작하고 있는 경우는, 메일 송신 후에 값이 데이타베이스에 삽입된다고 생각합니다(올바르게 삽입되지만, 늦게 삽입됩니다).
확인 메일을 재발송신하는 것도 확인하실 수 있습니다.이 작업은 Wordpress 관리자에서 수행할 수 있습니다.주문을 편집하면 오른쪽에 '작업' 드롭다운이 표시됩니다.주문서 재발송신 메일'에서 '처리주문'을 선택하실 수 있습니다.그런 다음 드롭다운 옆에 있는 새로 고침 아이콘을 클릭하면 주문 확인 이메일을 다시 받게 됩니다.아래 스크린샷을 참조하십시오.
이번에는 전자 메일을 보내기 전에 값이 이미 데이터베이스에 있는지 확인합니다.
이 정보가 문제 해결에 도움이 되기를 바랍니다.
'attendee_data'는 직렬화된 개체이므로 함수 get_post_meta에 전달된 세 번째 인수는 false(또는 생략)로 설정해야 합니다.
$x = get_post_meta( $order->id, 'attendee_data', false );
언급URL : https://stackoverflow.com/questions/25635461/get-post-meta-in-woocommerce-email-notifications
'programing' 카테고리의 다른 글
IFormatProvider의 역할은 무엇입니까? (0) | 2023.05.11 |
---|---|
특성 오류: 'ElementExcel 파일을 가져오려고 할 때 Tree' 개체에 'getiterator' 특성이 없습니다. (0) | 2023.05.11 |
경고: 실패한 propType: 잘못된 prop 'component'가 'Route'에 제공됨 (0) | 2023.03.27 |
p:calendar를 사용하여 시작 날짜와 종료 날짜를 상호 제한(검증 없음) (0) | 2023.03.27 |
TypeScript에서 추상 메서드를 선언하는 중 (0) | 2023.03.27 |