web-dev-qa-db-fra.com

Woocommerce avec le plugin metabox

J'utilise woocommerce comme solution de commerce électronique et le plugin metabox ( http://www.deluxeblogtips.com/meta-box/ ) pour me simplifier la vie lorsque j'implémente des méta-boîtes. Je n'ai jamais eu de problèmes avec cela, mais je dois maintenant ajouter ma propre méta-boîte personnalisée au type de publication de produit woocommerce ... mais elle n'est jamais ajoutée? Si j'ajoute la méta-boîte à l'ancienne méthode add_meta_box et que la méta-boîte est ajoutée correctement ... alors je me demandais si vous auriez une idée de la raison pour laquelle l'utilisation du plug-in causerait un problème? Voici le code que j'utilise pour ajouter la boîte méta au tableau global meta_boxes:

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'
    ),
)
);

Merci pour toute l'aide que vous pourrez fournir!

1
FlimFlam

Voici le code de metabox que j'utilise et qui fonctionne très bien pour moi:

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

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

Cependant, get_post_meta() ne renvoie pas les données de mes pages de modèle, j'utilise donc une méthode plus "directe" pour afficher le méta-contenu:

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

Bien entendu, cela suppose que vous déclariez également global $product; quelque part au-dessus de ce code dans votre fichier de modèle.

4
mroncetwice

Je pense que le code que vous utilisez est obsolète. Voici le code qui ajoute des méta-boîtes et des champs personnalisés au produit WooCommerce qui fonctionne avec la dernière version de Meta Box :

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