Hola
Veamos el codigo que puse de ejemplo, veras que tiene is_object( $item ) ...
y is_array( $item ) ...
el motivo fue porque para versiones antiguas no se pasaba una instancia de la class WP_Product..
asi que primero debes saber si lo estas haciendo para todas las versiones del WooCommerce o solo para la 3.*+, que si pasa una instancia de la class.
Para simplificar el codigo y determinar como capturar x valor.
Te sugiero que revises el codigo del WooCommerce y https://docs.woocommerce.com/ ya que debes entender como funciona. Te lo comento porque diria que eres programador y es algo importante, no es necesario que te lo aprendas todo, obviamente pero si lo basico.
Viendo el codigo que pones ahora no se si eres programador.
Te comento:
– Es recomendable habilitar el debug del WordPress para ver los errores.
– Ese codigo esta mal
Tienes etiquetas <?php
que no deberian existir y faltan cerrarlas.
Metes el mensaje dentro del bucle, no entiendo porque?
Para simplificar un poco.
Copia esta function en el functions.php del theme o en tu plugin de functions si es que lo usas como no se para que version del WooCommerce es sigo con las dos maneras para conseguir el ID del producto.
function zelarra_detect_product_id_in_order( $product_id, $order ) {
$product_id = ( is_numeric( $product_id ) ? absint( $product_id ) : 0 );
if ( $product_id && is_object( $order ) && method_exists( $order, 'get_items' ) ) {
foreach ( $order->get_items() as $item ) {
if ( is_array( $item ) && array_key_exists( 'product_id', $item ) ) {
$item_product_id = $item['product_id'];
} elseif ( is_object( $item ) && method_exists( $item, 'get_product' ) ) {
$item_product = $item->get_product();
$item_product_id = $item_product->get_id();
}
if ( isset( $item_product_id ) && $product_id === absint( $item_product_id ) ) {
return true;
}
}
}
return false;
}
Esa function te devolvera verdadero o falso si el product_id existe en el order.
Copia esto en los templates de los emails.
<?php if ( zelarra_detect_product_id_in_order( 314, $order ) ) : ?>
<?php /** Custom message for product id 314 */ ?>
<?php elseif ( zelarra_detect_product_id_in_order( 315, $order ) ) : ?>
<?php /** Custom message for product id 315 */ ?>
<?php elseif ( zelarra_detect_product_id_in_order( 316, $order ) ) : ?>
<?php /** Custom message for product id 316 */ ?>
<?php else : ?>
<?php /** Default message */ ?>
<?php /* translators: %s: Customer first name */ ?>
<p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $order->get_billing_first_name() ) ); ?></p>
<?php /* translators: %s: Order number */ ?>
<p><?php printf( esc_html__( 'Just to let you know — we\'ve received your order #%s, and it is now being processed:', 'woocommerce' ), esc_html( $order->get_order_number() ) ); ?></p>
<?php endif; ?>
Sustituyendo esto:
<?php /* translators: %s: Customer first name */ ?>
<p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $order->get_billing_first_name() ) ); ?></p>
<?php /* translators: %s: Order number */ ?>
<p><?php printf( esc_html__( 'Just to let you know — we\'ve received your order #%s, and it is now being processed:', 'woocommerce' ), esc_html( $order->get_order_number() ) ); ?></p>
Ojo con las tags de PHP.
Es otro ejemplo de como podrias hacerlo, que tampoco lo he probado.
Igualmente tambien podrias meter el codigo de los templates en una function o incluso crearte un filtro. Lo importante es que lo hagas la mejor manera posible para entenderlo si alguna vez necesitas modificarlo.