代码之家  ›  专栏  ›  技术社区  ›  Florante Ferrer

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

  •  2
  • Florante Ferrer  · 技术社区  · 9 年前

    enter image description here

    我已经放置了 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;
    }
    
    ?>
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   LoicTheAztec    9 年前

    <imput> 文本字段属性 name="Total USD Currency" .应该改为 name="total-usd" id 属性应该是唯一的 .

    我更改了您的代码:

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

    代码进入函数。活动子主题(或主题)或任何插件文件中的php文件。

    您将获得以下信息:

    enter image description here