general-block-email.php
<?php
/**
* General block email
*
* Used to render information for the email editor WooCommerce content block (BlockEmailRenderer::WOO_EMAIL_CONTENT_PLACEHOLDER).
*
* The dynamic content part of the block can be placed here.
* Examples include:
*
* 1. Content with a lot of conditional logic
* 2. Content that can not be generated by personalization tags
* 3. Content for specific emails that does not include the typical WooCommerce order details
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates\Emails\Block
* @version 10.5.0
*/
defined( 'ABSPATH' ) || exit;
// phpcs:disable Squiz.PHP.EmbeddedPhp.ContentBeforeOpen -- removed to prevent empty new lines.
// phpcs:disable Squiz.PHP.EmbeddedPhp.ContentAfterEnd -- removed to prevent empty new lines.
use Automattic\WooCommerce\Enums\OrderStatus;
use Automattic\WooCommerce\Internal\Settings\PointOfSaleDefaultSettings;
if ( 'customer_invoice' === $email->id ) :
// Customer invoice email
// We are keeping this here until we have a better way to handle conditional content in the email editor.
?>
<?php if ( $order->needs_payment() ) { ?>
<p><?php
if ( $order->has_status( OrderStatus::FAILED ) ) {
printf(
wp_kses(
/* translators: %1$s Site title, %2$s Order pay link */
__( 'Sorry, your order on %1$s was unsuccessful. Your order details are below, with a link to try your payment again: %2$s', 'woocommerce' ),
array(
'a' => array(
'href' => array(),
),
)
),
esc_html( get_bloginfo( 'name', 'display' ) ),
'<a href="' . esc_url( $order->get_checkout_payment_url() ) . '">' . esc_html__( 'Pay for this order', 'woocommerce' ) . '</a>'
);
} else {
printf(
wp_kses(
/* translators: %1$s Site title, %2$s Order pay link */
__( 'An order has been created for you on %1$s. Your order details are below, with a link to make payment when you’re ready: %2$s', 'woocommerce' ),
array(
'a' => array(
'href' => array(),
),
)
),
esc_html( get_bloginfo( 'name', 'display' ) ),
'<a href="' . esc_url( $order->get_checkout_payment_url() ) . '">' . esc_html__( 'Pay for this order', 'woocommerce' ) . '</a>'
);
}
?></p>
<?php } else { ?>
<p><?php
/* translators: %s Order date */
printf( esc_html__( 'Here are the details of your order placed on %s:', 'woocommerce' ), esc_html( wc_format_datetime( $order->get_date_created() ) ) );
?></p>
<?php
}
endif;
if ( 'customer_new_account' === $email->id ) :
?>
<?php if ( $set_password_url ) : ?>
<p><a href="<?php echo esc_attr( $set_password_url ); ?>"><?php printf( esc_html__( 'Set your new password.', 'woocommerce' ) ); ?></a></p>
<?php
endif;
endif;
if ( 'customer_reset_password' === $email->id && isset( $reset_key, $user_id ) ) :
// Customer reset password email.
?>
<p>
<a class="link" href="<?php echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id, 'login' => rawurlencode( $user_login ) ), wc_get_endpoint_url( 'lost-password', '', wc_get_page_permalink( 'myaccount' ) ) ) ); ?>"><?php // phpcs:ignore WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound ?>
<?php esc_html_e( 'Reset your password', 'woocommerce' ); ?>
</a>
</p>
<?php
endif;
/**
* Action hook for email classes to hook into the general block email template.
*
* @since 10.5.0
* @param bool $sent_to_admin Whether the email is being sent to admin.
* @param bool $plain_text Whether the email is being sent as plain text.
* @param WC_Email $email The email object.
*/
do_action( 'woocommerce_email_general_block_content', $sent_to_admin, $plain_text, $email );
/**
* Filter the list of email IDs that should not display order details.
*
* @since 10.5.0
* @param array $emails_without_order_details Array of email IDs that should not display order details.
*/
$emails_without_order_details = apply_filters( 'woocommerce_emails_general_block_content_emails_without_order_details', array() );
$accounts_related_emails = array(
'customer_reset_password',
'customer_new_account',
);
$emails_without_order_details = array_merge( $emails_without_order_details ?? array(), $accounts_related_emails );
if ( isset( $order ) && ! in_array( $email->id, $emails_without_order_details, true ) ) {
/**
* Woocommerce_email_order_details
*
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Structured_Data::generate_order_data() Generates structured data.
* @hooked WC_Structured_Data::output_structured_data() Outputs structured data.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
/**
* Woocommerce_email_order_meta
*
* @hooked WC_Emails::order_meta() Shows order meta data.
* @since 2.0.17
*/
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );
/**
* Woocommerce_email_customer_details
*
* @hooked WC_Emails::customer_details() Shows customer details
* @hooked WC_Emails::email_address() Shows email address
* @since 2.5.0
*/
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
}
if ( 'customer_pos_completed_order' === $email->id || 'customer_pos_refunded_order' === $email->id ) :
if ( ! empty( get_option( 'woocommerce_pos_store_email', PointOfSaleDefaultSettings::get_default_store_email() ) )
|| ! empty( get_option( 'woocommerce_pos_store_phone' ) )
|| ! empty( get_option( 'woocommerce_pos_store_address', PointOfSaleDefaultSettings::get_default_store_address() ) ) ) :
?>
<!-- wp:group -->
<div class="wp-block-group">
<?php if ( ! empty( get_option( 'woocommerce_pos_store_name', PointOfSaleDefaultSettings::get_default_store_name() ) ) ) : ?>
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><?php echo esc_html( get_option( 'woocommerce_pos_store_name', PointOfSaleDefaultSettings::get_default_store_name() ) ); ?></h3>
<!-- /wp:heading -->
<?php else : ?>
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><?php echo esc_html__( 'Store Information', 'woocommerce' ); ?></h3>
<!-- /wp:heading -->
<?php endif; ?>
<?php if ( ! empty( get_option( 'woocommerce_pos_store_email', PointOfSaleDefaultSettings::get_default_store_email() ) ) ) : ?>
<!-- wp:paragraph -->
<p><?php echo esc_html( get_option( 'woocommerce_pos_store_email', PointOfSaleDefaultSettings::get_default_store_email() ) ); ?></p>
<!-- /wp:paragraph -->
<?php endif; ?>
<?php if ( ! empty( get_option( 'woocommerce_pos_store_phone' ) ) ) : ?>
<!-- wp:paragraph -->
<p><?php echo esc_html( get_option( 'woocommerce_pos_store_phone' ) ); ?></p>
<!-- /wp:paragraph -->
<?php endif; ?>
<?php if ( ! empty( get_option( 'woocommerce_pos_store_address', PointOfSaleDefaultSettings::get_default_store_address() ) ) ) : ?>
<!-- wp:paragraph -->
<p><?php echo esc_html( get_option( 'woocommerce_pos_store_address', PointOfSaleDefaultSettings::get_default_store_address() ) ); ?></p>
<!-- /wp:paragraph -->
<?php endif; ?>
</div>
<!-- /wp:group -->
<?php
endif;
if ( ! empty( get_option( 'woocommerce_pos_refund_returns_policy' ) ) ) :
?>
<!-- wp:group -->
<div class="wp-block-group">
<!-- wp:heading {"level":3} -->
<h3><?php echo esc_html__( 'Refund & Returns Policy', 'woocommerce' ); ?></h3>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p><?php echo esc_html( get_option( 'woocommerce_pos_refund_returns_policy' ) ); ?></p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:group -->
<?php
endif;
endif;