在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+和工程测试。
你会得到这样的:
我明白了很多,感谢你在百忙一个后续问题。我如何回应所显示的显示已被除以0.75等数字?喜欢而不是100它会显示133.33? –
@FloranteFerrer请问,[这个答案是回答你的问题吗?](https://stackoverflow.com/help/someone-answers)...我认为它是回答...你在说什么计算,因为它不在你的问题?所以可能你应该澄清你的问题关于“计算”... – LoicTheAztec