es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Alternativa para usar la función “is_wc_endpoint_url()” en las notificaciones por correo electrónico de WooCommerce.

Recientemente, solicité y recibí las respuestas para dos soluciones:

  • Agregando metadatos
  • Cambiando metadatos

de algunos elementos de orden. Soluciones que solo funcionarán para las notificaciones por correo electrónico de WooCommerce enviadas en pedidos completados.

El problema con las soluciones recibidas es que en ambas se utiliza la función “is_wc_endpoint_url()” para limitarlas solo a las notificaciones por correo electrónico, lo que en mi caso particular (¡no sé por qué!) hace que solo funcionen para las notificaciones enviadas a los administradores, pero no a los clientes, que son de hecho los principales destinatarios de los metadatos en cuestión.

¿Hay alguna manera de solucionar este problema con la función “is_wc_endpoint_url()”?

La primera respuesta, agregando metadatos:

function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
    // On email notifications
    if ( ! is_wc_endpoint_url() && $item->is_type('line_item') ) {
        echo '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label">Label</strong><p>Value order id = ' . $order->get_id() . '</p></li></ul>';
    }
}
add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );

La segunda respuesta (una de las opciones), cambiando metadatos:

function filter_woocommerce_order_item_get_formatted_meta_data( $formatted_meta, $item ) {
    // Only on emails notifications
    if ( is_admin() || is_wc_endpoint_url() )
        return $formatted_meta;

    foreach ( $formatted_meta as $key => $meta ) {
        $formatted_meta[$key]->display_key = 'new key';
        $formatted_meta[$key]->display_value = 'new value';
    }

    return $formatted_meta;
}
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'filter_woocommerce_order_item_get_formatted_meta_data', 10, 2 );
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema al aplicar soluciones para agregar/cambiar metadatos en las notificaciones por correo electrónico de WooCommerce

    Como experto en TI especializado en PHP, WordPress, WooCommerce y notificaciones por correo electrónico, recientemente solicité y recibí dos soluciones para agregar y cambiar metadatos de algunos elementos de pedido. Se suponía que estas soluciones funcionaban solo para las notificaciones por correo electrónico de WooCommerce enviadas en pedidos completados. Sin embargo, el problema con las soluciones recibidas es que ambas utilizan la función is_wc_endpoint_url() para limitarlas solo a las notificaciones por correo electrónico.

    En mi caso particular, por alguna razón desconocida, las soluciones solo funcionan para las notificaciones enviadas a los administradores y no para los clientes, que son los principales destinatarios de los metadatos.

    Quiero saber si hay alguna manera de solucionar este problema con la función is_wc_endpoint_url().

    La primera solución implica utilizar la acción woocommerce_order_item_meta_start para agregar metadatos al elemento de pedido. El código es el siguiente:

    function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
        // Solo en notificaciones por correo electrónico
        if ( ! is_wc_endpoint_url() && $item->is_type('line_item') ) {
            echo '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label">Etiqueta</strong><p>Valor del ID de pedido = ' . $order->get_id() . '</p></li></ul>';
        }
    }
    add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );
    

    La segunda solución implica utilizar el filtro woocommerce_order_item_get_formatted_meta_data para cambiar los metadatos del elemento de pedido. El código es el siguiente:

    function filter_woocommerce_order_item_get_formatted_meta_data( $formatted_meta, $item ) {
        // Solo en notificaciones por correo electrónico
        if ( is_admin() || is_wc_endpoint_url() )
            return $formatted_meta;
    
        foreach ( $formatted_meta as $key => $meta ) {
            $formatted_meta[$key]->display_key = 'nueva clave';
            $formatted_meta[$key]->display_value = 'nuevo valor';
        }
    
        return $formatted_meta;
    }
    add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'filter_woocommerce_order_item_get_formatted_meta_data', 10, 2 );
    

    En ambas soluciones, se utiliza la función is_wc_endpoint_url() para determinar si los metadatos deben agregarse o cambiarse solo para las notificaciones por correo electrónico. Sin embargo, en mi caso, esta función hace que las soluciones funcionen solo para las notificaciones enviadas a los administradores y no para los clientes.

    Estoy buscando una solución alternativa a este problema para que las soluciones funcionen para todas las notificaciones por correo electrónico, incluidas aquellas enviadas a los clientes.

Comments are closed.