enter image description here I am trying to display any value I place on the placeholder on a custom field at the admin area on the post, or an individual order page.
I have already placed get_post_meta( get_the_id(), 'total-usd', true )
inside the quotes value=""
so it should not be empty, but its still shows empty when I click update.
What's seems to be wrong with my code? I appreciate your help on this.
Here is my code:
<?php
function cpmb_add_meta_box() {
add_meta_box(
'woocommerce-order-my-custom',
'USD Currency display',
'cpmb_display_meta_box',
'shop_order',
'normal',
'core'
);
}
add_action( 'add_meta_boxes', 'cpmb_add_meta_box');
function cpmb_display_meta_box( $post ) {
wp_nonce_field( plugin_basename( __POST__ ), 'cpmb-nonce-field' );
$html = '<label id="total-usd" for="total-usd">';
$html .= '<strong>Total USD Currency</strong>';
$html .= '</label><br />';
$html .= '<input type="text" id="total-usd" name="Total USD Currency" value="' . get_post_meta( get_the_id(), 'total-usd', true ) . '" placeholder="Enter Total here" />';
echo $html;
}
function cpmb_save_meta_box_data( $post_id ) {
if ( cpmb_user_can_save( $post_id, 'cpmb-nonce-field' ) ){
if ( isset( $_POST['total-usd'] ) && 0 < count( strlen( trim($_POST['total-usd'] )))) {
$total_usd = stripslashes( strip_tags($_POST['total-usd']));
update_post_meta( $post_id, 'total-usd', $total_usd );
}
}
}
add_action( 'save_post', 'cpmb_save_meta_box_data' );
function cpmb_user_can_save( $post_id, $nonce ) {
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ $nonce ] ) && wp_verify_nonce($_POST[ $nonce ], plugin_basename( __POST__ ) ) );
return ! ( $is_autosave || $is_revision ) && $is_valid_nonce;
}
?>
Your main problem is located in your <imput>
text field attribute name="Total USD Currency"
. It should be instead name="total-usd"
. Also the html id
attributes should be unique (you can't set the same ID in your and in your html tags) .
I have changed your code:
// Adding the metabox (on the right side)
add_action( 'add_meta_boxes', 'cpmb_add_meta_box');
function cpmb_add_meta_box() {
add_meta_box(
'woocommerce-order-my-custom',
__('USD Currency display'),
'cpmb_display_meta_box',
'shop_order',
'side',
'core'
);
}
// The metabox content
function cpmb_display_meta_box( $post ) {
// Get
$total_usd = get_post_meta( $post->ID, 'total-usd', true );
echo '<input type="hidden" name="cpmb_total_usd_nonce" value="' . wp_create_nonce() . '">
<label class="total-usd" for="total-usd">
<strong>Total USD Currency</strong></label><br />
<input type="text" id="total-usd" name="total-usd" value="' . $total_usd . '" placeholder="'. __("Enter Total here").'" />';
}
// Save/Update the meta data
add_action( 'save_post', 'cpmb_save_meta_box_data' );
function cpmb_save_meta_box_data( $post_id ) {
// Only for shop order
if ( 'shop_order' != $_POST[ 'post_type' ] )
return $post_id;
## Security verifications. ##
// Check if our nonce is set (and our cutom field)
if ( ! isset( $_POST[ 'cpmb_total_usd_nonce' ] ) && isset( $_POST['total-usd'] ) )
return $post_id;
$nonce = $_POST[ 'cpmb_total_usd_nonce' ];
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $nonce ) )
return $post_id;
// Checking that is not an autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// Check the user’s permissions (for 'shop_manager' and 'administrator' user roles)
if ( ! current_user_can( 'edit_shop_order', $post_id ) && ! current_user_can( 'edit_shop_orders', $post_id ) )
return $post_id;
## SETTING AND UPDATING DATA (SECURITY PASSED) ##
update_post_meta( $post_id, 'total-usd', sanitize_text_field( $_POST[ 'total-usd' ] ) );
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested on WooCommerce versions 3+ and works.
You will get this:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.