En mi sitio web, estoy usando el complemento Checkout Fields Manager, donde he creado algunos campos personalizados en la sección de facturación. Los campos son: „Czy na fakturę?”, „Nazwa firmy”, „NIP”. Significan consecutivamente “¿Desea una factura?”, “Nombre de la empresa” y “Número fiscal”.
captura de pantalla1
Quiero mostrar los campos personalizados “Czy na fakturę?”, “Nazwa firmy” y “NIP”, cada vez que alguien complete esos campos y hacer que aparezcan en el correo electrónico de pedido (para el administrador) en la tabla de totales. Pero deberían aparecer solo cuando alguien completa estos campos, de lo contrario no.
Por ahora tengo un código del creador del complemento en functions.php, que agrega todos los campos de facturación adicionales al correo electrónico enviado al administrador. Sin embargo, este código muestra todo: todos los detalles de facturación escritos por el cliente. Pero solo quiero esos 3 campos: Czy na fakturę?, Nazwa firmy y NIP agregados a la tabla de totales. Este código muestra los campos debajo de la tabla de totales. Aquí está el código:
/**
* Plugin Name: WooCommerce Checkout Manager Email Fix
* Description: Manages WooCommerce Checkout, the advanced way.
* Version: 1.0.0
* Author: QuadLayers
* Author URI: https://www.quadlayers.com
*/
add_action('woocommerce_email_after_order_table', 'wooccm_order_receipt_checkout_details', 10, 3);
function wooccm_order_receipt_checkout_details($order, $sent_to_admin, $plain_text="") {
if (class_exists('WOOCCM')) {
$billing_defaults = WOOCCM()->billing->get_defaults();
$shipping_defaults = WOOCCM()->shipping->get_defaults();
$additional_defaults = WOOCCM()->additional->get_defaults();
$billing = WOOCCM()->billing->get_fields();
$shipping = WOOCCM()->shipping->get_fields();
$additional = WOOCCM()->additional->get_fields();
if (!empty($billing)) {
foreach ($billing as $btn) {
if (!in_array($btn['name'], $billing_defaults)) {
if (( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'] . ': ' . nl2br(get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true));
echo "n";
} elseif (
!empty($btn['label']) &&
$btn['type'] == 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'];
echo "n";
} elseif (
( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'file' &&
(
$btn['type'] == 'multiselect' || $btn['type'] == 'multicheckbox'
)
) {
$value = get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true);
$strings = maybe_unserialize($value);
echo $btn['label'] . ': ';
if (!empty($strings)) {
if (is_array($strings)) {
$iww = 0;
$len = count($strings);
foreach ($strings as $key) {
if ($iww == $len - 1) {
echo $key;
} else {
echo $key . ', ';
}
$iww++;
}
} else {
echo $strings;
}
} else {
echo '-';
}
echo "n";
}
}
}
}
if (!empty($shipping)) {
foreach ($shipping as $btn) {
if (!in_array($btn['name'], $shipping_defaults)) {
if (( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'] . ': ' . nl2br(get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true));
echo "n";
} elseif (
!empty($btn['label']) &&
$btn['type'] == 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'];
echo "n";
} elseif (
( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'file' &&
(
$btn['type'] == 'multiselect' || $btn['type'] == 'multicheckbox'
)
) {
$value = get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true);
$strings = maybe_unserialize($value);
echo $btn['label'] . ': ';
if (!empty($strings)) {
if (is_array($strings)) {
$iww = 0;
$len = count($strings);
foreach ($strings as $key) {
if ($iww == $len - 1) {
echo $key;
} else {
echo $key . ', ';
}
$iww++;
}
} else {
echo $strings;
}
} else {
echo '-';
}
echo "n";
}
}
}
}
if (!empty($additional)) {
foreach ($additional as $btn) {
if (!in_array($btn['name'], $additional_defaults)) {
if (( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'] . ': ' . nl2br(get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true));
echo "n";
} elseif (
!empty($btn['label']) &&
$btn['type'] == 'heading' &&
$btn['type'] !== 'multiselect' &&
$btn['type'] !== 'file' &&
$btn['type'] !== 'multicheckbox'
) {
echo $btn['label'];
echo "n";
} elseif (
( get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true) !== '' ) &&
!empty($btn['label']) &&
$btn['type'] !== 'heading' &&
$btn['type'] !== 'file' &&
(
$btn['type'] == 'multiselect' || $btn['type'] == 'multicheckbox'
)
) {
$value = get_post_meta($order->get_id(), sprintf('_%s', $btn['key']), true);
$strings = maybe_unserialize($value);
echo $btn['label'] . ': ';
if (!empty($strings)) {
if (is_array($strings)) {
$iww = 0;
$len = count($strings);
foreach ($strings as $key) {
if ($iww == $len - 1) {
echo $key;
} else {
echo $key . ', ';
}
$iww++;
}
} else {
echo $strings;
}
} else {
echo '-';
}
echo "n";
}
}
}
}
}
}
Y el nuevo correo electrónico de pedido actual para el administrador se ve así:
Así que encontré un código que me permite agregar un campo personalizado a la tabla de totales, pero no funciona cuando quiero mostrar mis campos personalizados. Puede mostrar solo el valor estático que ingresé, no un valor dinámico que cambia según lo que ingresa el cliente. Este es el código:
/**
* @snippet Add Row to Order Totals Table - WooCommerce
* @how-to Get CustomizeWoo.com FREE
* @sourcecode https://businessbloomer.com/?p=21589
* @author Rodolfo Melogli
* @compatible WC 2.6.14, WP 4.7.2, PHP 5.5.9
*/
add_filter( 'woocommerce_get_order_item_totals', 'bbloomer_add_recurring_row_email', 10, 2 );
function bbloomer_add_recurring_row_email( $total_rows, $myorder_obj ) {
$total_rows['recurr_not'] = array(
'label' => __( 'Rec:', 'woocommerce' ),
'value' => 'blabla'
);
return $total_rows;
}
Soy bastante inexperto en programación, entonces, ¿habría alguien que supiera cómo resolver esto? 🙂
.