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