I keep going round in circles with my code, can anyone point me in the right direction please?
I've created a custom field for the order details page so the site admin can add a note to be printed on packing slips.
I need the 'div class="delivery-date"' section at the end of the below code to only appear IF the gift_message field is populated.
At the moment, it just displays an empty section.
add_action( 'woocommerce_admin_order_data_after_order_details', 'misha_editable_order_meta_general' );
function misha_editable_order_meta_general( $order ){
?>
<br class="clear" />
<h3>Admin note <a href="#" class="edit_address">Edit</a></h3>
<?php
$is_gift = $order->get_meta( 'is_gift' );
$gift_message = $order->get_meta( 'gift_message' );
?>
<div class="address">
<p><strong>Add admin note?</strong><?php echo $is_gift ? 'Yes' : 'No' ?></p>
<?php
// we show the rest fields in this column only if this order is marked as a gift
if( $is_gift ) :
?>
<p><strong>Admin note:</strong> <?php echo wpautop( esc_html( $gift_message ) ) ?></p>
<?php
endif;
?>
</div>
<div class="edit_address">
<?php
woocommerce_wp_radio( array(
'id' => 'is_gift',
'label' => 'Add admin note?',
'value' => $is_gift,
'options' => array(
'' => 'No',
'1' => 'Yes'
),
'style' => 'width:16px', // required for checkboxes and radio buttons
'wrapper_class' => 'form-field-wide' // always add this class
) );
woocommerce_wp_textarea_input( array(
'id' => 'gift_message',
'label' => 'Admin note:',
'value' => $gift_message,
'wrapper_class' => 'form-field-wide'
) );
?>
</div>
<?php
}
add_action( 'woocommerce_process_shop_order_meta', 'misha_save_general_details' );
function misha_save_general_details( $order_id ){
$order = wc_get_order( $order_id );
$order->update_meta_data( 'is_gift', wc_clean( $_POST[ 'is_gift' ] ) );
$order->update_meta_data( 'gift_message', wc_sanitize_textarea( $_POST[ 'gift_message' ] ) );
// wc_clean() and wc_sanitize_textarea() are WooCommerce sanitization functions
$order->save();
}
add_action( 'wpo_wcpdf_after_customer_notes', 'wpo_wcpdf_delivery_date', 10, 2 );
function wpo_wcpdf_delivery_date ($template_type, $order) {
if ($template_type == 'packing-slip') {
?>
<div class="delivery-date" style="border: 1px dashed;padding: 8px 10px 10px 10px;margin-top: 5px;min-width: 200px;">
<div><strong>Admin note</strong></div>
<div><?php echo $order->get_meta('gift_message'); ?></div>
</div>
<?php
}
}
You simply need to check in an if statement that the gift message exists (is not empty).
Try the following revised code:
add_action( 'wpo_wcpdf_after_customer_notes', 'wpo_wcpdf_delivery_date', 10, 2 );
function wpo_wcpdf_delivery_date($document_type, $order) {
if ( 'packing-slip' != $document_type ) return; // Target only Packing slip
// Check that the gift message exists (is not empty)
if ( $gift_message = $order->get_meta('gift_message') ) {
printf('<div class="delivery-date" style="border:1px dashed;padding:8px 10px 10px 10px;margin-top:5px;min-width:200px;">
<div><strong>%s</strong></div>
<div>%s</div>
</div>', esc_html__('Admin note'), $gift_message );
}
}
it should work.