在Woocommerce编辑订单页面获取自定义字段值定制metabox

问题描述:

enter image description here我想我显示的占位符放在一个自定义字段在对后,或单个订单页面管理区的任何值。在Woocommerce编辑订单页面获取自定义字段值定制metabox

我已经放在get_post_meta(get_the_id(), 'total-usd', true)引号value=""所以它不应该是空的里面,但是当我点击更新其仍显示为空。

我的代码似乎有什么错?我感谢你的帮助。

这里是我的代码:

<?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; 
} 

?> 

你的主要问题是位于您<imput>文本字段属性name="Total USD Currency"。它应该是name="total-usd"。另外,HTML id属性应该是唯一的(你不能设置相同的ID在你和你的HTML标签)

我已经改变了你的代码:

// 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' ])); 
} 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

此代码对WooCommerce版本3+和工程测试。

你会得到这样的:

enter image description here

+0

我明白了很多,感谢你在百忙一个后续问题。我如何回应所显示的显示已被除以0.75等数字?喜欢而不是100它会显示133.33? –

+0

@FloranteFerrer请问,[这个答案是回答你的问题吗?](https://*.com/help/someone-answers)...我认为它是回答...你在说什么计算,因为它不在你的问题?所以可能你应该澄清你的问题关于“计算”... – LoicTheAztec