2017-07-31 69 views
2

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

?> 

回答

0

你的主要問題是位於您<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://stackoverflow.com/help/someone-answers)...我認爲它是回答...你在說什麼計算,因爲它不在你的問題?所以可能你應該澄清你的問題關於「計算」... – LoicTheAztec

相關問題