wake-up-neo.net

Woocommerce mit Metabox Plugin

Ich verwende woocommerce als meine E-Commerce-Lösung und das Metabox-Plugin ( http://www.deluxeblogtips.com/meta-box/ ), um mein Leben bei der Implementierung von Meta-Boxen viel einfacher zu gestalten. Ich hatte noch nie Probleme damit, aber ich muss jetzt meine eigene benutzerdefinierte Meta-Box zum Post-Typ des Woocommerce-Produkts hinzufügen ... aber es wird nie hinzugefügt? Wenn ich die Meta-Box auf die altmodische Art und Weise add_meta_box hinzufüge und die Meta-Box korrekt hinzugefügt wird, habe ich mich nur gefragt, ob Sie eine Idee hätten, warum die Verwendung des Plugins ein Problem verursachen würde. Hier ist der Code, den ich verwende, um das Meta-Feld zum globalen meta_boxes-Array hinzuzufügen:

global $meta_boxes;

$prefix = "esfproduct_";

// Aggregator metaboxes

$meta_boxes[] = array(
'id'    => 'additionalproductdetails',
'title' => 'Additional Details',
'pages' => array( 'product' ),
'context' => 'normal',
'priority' => 'side',
'fields' => array(
    array(
        'name' => 'Product Features',
        'id'   => "{$prefix}productfeatures",
        'type' => 'text'
    ),
)
);

Vielen Dank für jede Hilfe, die Sie zur Verfügung stellen können!

1
FlimFlam

Hier ist der Metabox-Code, den ich verwende und der für mich gut funktioniert:

// Add meta boxes with TinyMCE via wp_editor() function

// Define the custom box
add_action( 'add_meta_boxes', 'product_details_add' );                                                      
// Do something with the data entered
add_action( 'save_post', 'product_details_save' );
// Adds a box to the main column on the Product post_type edit screens
function product_details_add() {
    add_meta_box( 'product_details', 'Product Details', 'product_details_call', 'product', 'normal', 'high' );
}
// Prints the box content
function product_details_call( $post ) {
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'product_details_noncename' ); 
    $field_value = get_post_meta( $post->ID, 'product_details_meta', false );
    wp_editor( $field_value[0], 'product_details_meta' );
}
// When the post is saved, saves our custom data
function product_details_save( $post_id ) {  
    // verify if this is an auto save routine. 
    // If it is our form has not been submitted, so we dont want to do anything
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
            return;
    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( ( isset ( $_POST['product_details_noncename'] ) ) && ( ! wp_verify_nonce( $_POST['product_details_noncename'], plugin_basename( __FILE__ ) ) ) )
            return;
    // Check permissions
    if ( ( isset ( $_POST['post_type'] ) ) && ( 'page' == $_POST['post_type'] )  ) {
        if ( ! current_user_can( 'edit_page', $post_id ) ) {
            return;
        }       
    }
    else {
        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }
    // OK, we're authenticated: we need to find and save the data
    if ( isset ( $_POST['product_details_meta'] ) ) {
        update_post_meta( $post_id, 'product_details_meta', $_POST['product_details_meta'] );
    }   
}

////////////

Da get_post_meta() die Daten auf meinen Vorlagenseiten jedoch nicht zurückgibt, verwende ich eine direktere Methode, um den Meta-Inhalt anzuzeigen:

<?php echo $product->product_custom_fields['product_details_meta'][0];?>

Dies setzt natürlich voraus, dass Sie global $product; irgendwo oberhalb dieses Codes in Ihrer Vorlagendatei deklarieren.

4
mroncetwice

Ich denke, der von Ihnen verwendete Code ist veraltet. Hier ist der Code, der dem WooCommerce-Produkt Meta-Boxen und benutzerdefinierte Felder hinzufügt, die mit der neuesten Version von Meta-Box funktionieren:

add_filter( 'rwmb_meta_boxes', 'your_prefix_meta_boxes' );
function your_prefix_meta_boxes( $meta_boxes ) {
    $prefix = 'esfproduct_';
    $meta_boxes[] = array(
        id' => 'additionalproductdetails',
        'title' => 'Additional Details',
        'context' => 'normal',
        'priority' => 'side',
        'fields'     => array(
            array(
                'name' => 'Product Features',
                'id'   => "{$prefix}productfeatures",
                'type' => 'text'
            ),
        ),
    );
    return $meta_boxes;
}
0
Anh Tran