WordPress : Champ personnalisé créé dans add_meta_boxes réapparaissant à nouveau dans la métabox personnalisée par défaut

Publié par Jean-Michel le

Je réussis à créer une métabox avec un champ personnalisé à l’intérieur, et je la limite pour qu’elle apparaisse dans un type de publication personnalisé.

//define metabox
function product_info_en() {
    add_meta_box( 'english_info', 'English Info', 'english_product_name_callback', array('product'), 'normal', 'high' );
}

//add to hook
add_action( 'add_meta_boxes', 'product_info_en' );

Le code pour l’afficher dans la page produit :

// display in add product admin page
function english_product_name_callback( $post ) {
    //ob_start();
    $content = esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );

        //here goes the custom field
        echo '<fieldset><div><label><b>English Product Name:</b></label><br/>';
        echo '<input id="product_name_en" type="text" name="product_name_en" style="width:100%; margin:10px 0px"';
        echo ' value="';
        echo esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
        echo '"></div></fieldset>';

        //here goes the wp_editor
        echo '<fieldset><div><label><b>English Product Content Info:</b></label><div><br/>';
        echo '<div>';
        wp_editor($content, 'product_desc_en', array(
            'wpautop' => true,
            'media_buttons' => true,
            'textarea_rows' => 10
            )
            );
        echo '</div></fieldset>';
}

Voici le code qui fait le travail d’enregistrement :

//save
function enginfo_save_meta_box( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( $parent_id = wp_is_post_revision( $post_id ) ) {
        $post_id = $parent_id;
    }
    $fields = [
        'product_name_en',
    ];
    foreach ( $fields as $field ) {
        if ( array_key_exists( $field, $_POST ) ) {
            update_post_meta( $post_id, $field, sanitize_text_field( $_POST[$field] ) );
        }
     }
    update_post_meta( $post_id,'product_desc_en', wp_kses_post( $_POST['product_desc_en'] ) );
}
add_action( 'save_post', 'enginfo_save_meta_box' );

Cependant, le champ personnalisé créé qui est censé aller uniquement dans la métabox nouvellement créée apparaîtra toujours dans le « champ personnalisé » par défaut. Et cela arrive à tous les types de messages. Comme indiqué ci-dessous, quel pourrait être le problème ici ?

entrez la description de l'image ici

Solution n°1 trouvée

Pour masquer et ne pas afficher vos champs personnalisés dans la boîte par défaut, veuillez préfixer vos champs personnalisés avec un trait de soulignement _ , ainsi product_desc_endeviendra_product_des_en

Je veux dire que les noms de vos champs personnalisés doivent être précédés d’un trait de soulignement et que la métabox personnalisée par défaut de WordPress les ignorera et ne s’affichera pas dans l’interface graphique par défaut de WordPress, mais vous pouvez les utiliser et les afficher dans vos propres métaboxes personnalisées en appelant avec leurs nouveaux noms préfixés Underscore .

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *