Maison  >  Questions et réponses  >  le corps du texte

Exclure l'adresse de facturation des notifications par e-mail WooCommerce spécifiques, afficher uniquement l'adresse de livraison

L'action "woocommerce_email_customer_details" contient les données d'adresse de facturation et d'adresse de livraison. Tout ce dont j'ai besoin, c'est de l'adresse de livraison.

Comment puis-je atteindre cet objectif ? Vous trouverez ci-dessous mon modèle d'e-mail en texte brut "Nouvelle commande" actuel (admin-new-order.php)

/*Admin new order email (plain text)*/
defined( 'ABSPATH' ) || exit;
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
if ( $additional_content ) {
    echo esc_html( wp_strip_all_tags( wptexturize( $additional_content ) ) );
}

P粉071626364P粉071626364269 Il y a quelques jours418

répondre à tous(1)je répondrai

  • P粉806834059

    P粉8068340592023-12-30 10:19:53

    Pour les e-mails HTML :

    Si vous utilisez ce code, les informations de facturation et d'expédition seront supprimées des notifications par e-mail requises. En effet, cela garantit que les fichiers modèles pertinents ne sont pas chargés :

    function action_woocommerce_email_customer_details( $order, $sent_to_admin, $plain_text, $email ) {
        $mailer = WC()->mailer();
        remove_action( 'woocommerce_email_customer_details', array( $mailer, 'email_addresses' ), 20 );
    }
    add_action( 'woocommerce_email_customer_details', 'action_woocommerce_email_customer_details', 5, 4 );
    

    Cependant, puisque vous souhaitez uniquement masquer/ne pas afficher partiellement la sortie du fichier modèle concerné (/emails/email-addresses.php), une approche différente sera nécessaire .

    Cela peut être fait en adaptant le fichier modèle /emails/email-addresses.php à vos besoins. Ce modèle peut être remplacé en le copiant yourtheme/woocommerce/emails/email-addresses.php

    Remarque : Puisque vous souhaitez appliquer cela uniquement à des notifications par e-mail spécifiques, vous devez utiliser $email->id. Étant donné que cela n'est pas transmis par défaut au fichier modèle concerné, une solution de contournement est requise.

    Ceci est décrit dans Comment transmettre "$email" au fichier de modèle d'e-mail WooCommerce code de réponse s'il n'est pas disponible par défaut.


    Alors pour répondre à votre question :

    Étape 1)Ajoutez dans le fichier functions.php

    du thème enfant actif (ou thème actif)
    // Header - set global variable
    function action_woocommerce_email_header( $email_heading, $email ) {
        $GLOBALS['email_id'] = $email->id;
    } 
    add_action( 'woocommerce_email_header', 'action_woocommerce_email_header', 10, 2 );
    

    Étape 2) Dans le fichier modèle /emails/email-addresses.php, @version 5.6.0

    Remplacer les lignes 18 à 20

    if ( ! defined( 'ABSPATH' ) ) {
        exit;
    }
    

    et

    if ( ! defined( 'ABSPATH' ) ) {
        exit;
    }
    
    // Getting the email ID global variable
    $ref_name_globals_var = isset( $GLOBALS ) ? $GLOBALS : '';
    $email_id = isset( $ref_name_globals_var['email_id'] ) ? $ref_name_globals_var['email_id'] : '';
    

    et

    Remplacer les lignes 28 à 40

    
        

    get_billing_phone() ) : ?>
    get_billing_phone() ); ?> get_billing_email() ) : ?>
    get_billing_email() ); ?>

    et

    
        
            

    get_billing_phone() ) : ?>
    get_billing_phone() ); ?> get_billing_email() ) : ?>
    get_billing_email() ); ?>


    Pour les e-mails en texte brut :

    Étape 1)Ajoutez dans le fichier functions.php

    du thème enfant actif (ou thème actif)
    function action_woocommerce_email_order_details( $order, $sent_to_admin, $plain_text, $email ) {
        // Plain text is TRUE and target specific email notification
        if ( $plain_text && $email->id == 'new_order' ) {
            $GLOBALS['email_id'] = $email->id;
        }
    }
    add_action( 'woocommerce_email_order_details', 'action_woocommerce_email_order_details', 1, 4 );
    

    Étape 2) Dans le fichier modèle /emails/plain/email-addresses.php, @version 5.6.0

    Remplacer les lignes 20 à 29

    echo "\n" . esc_html( wc_strtoupper( esc_html__( 'Billing address', 'woocommerce' ) ) ) . "\n\n";
    echo preg_replace( '##i', "\n", $order->get_formatted_billing_address() ) . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    
    if ( $order->get_billing_phone() ) {
        echo $order->get_billing_phone() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    }
    
    if ( $order->get_billing_email() ) {
        echo $order->get_billing_email() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    }
    

    et

    // Getting the email ID global variable
    $ref_name_globals_var = isset( $GLOBALS ) ? $GLOBALS : '';
    $email_id = isset( $ref_name_globals_var['email_id'] ) ? $ref_name_globals_var['email_id'] : '';
    
    // Targeting NOT a specific email. Multiple statuses can be added, separated by a comma
    if ( ! in_array( $email_id, array( 'new_order' ) ) ) {
        echo "\n" . esc_html( wc_strtoupper( esc_html__( 'Billing address', 'woocommerce' ) ) ) . "\n\n";
        echo preg_replace( '##i', "\n", $order->get_formatted_billing_address() ) . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    
        if ( $order->get_billing_phone() ) {
            echo $order->get_billing_phone() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
        }
    
        if ( $order->get_billing_email() ) {
            echo $order->get_billing_email() . "\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
        }
    }
    

    répondre
    0
  • Annulerrépondre