WordPress : La métabox de texte personnalisée dans la page-admin ne sera pas enregistrée

Publié par Jean-Michel le

J’ai ajouté une méta-boîte personnalisée pour coller un code court de curseur dans mon administrateur de page… J’essaie d’enregistrer ma méta-boîte personnalisée depuis des heures maintenant. Mais pour d’une certaine manière, cela ne fonctionne pas. Je pourrais jurer que mon code est correct, mais ce n’est probablement pas le cas… Quelqu’un peut-il m’aider s’il vous plaît ? Ce serait une grande faveur ! Merci!

<?php
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
add_meta_box( 'my-meta-box-masterslider', 'Masterslider Shortcode', 'cd_meta_box_masterslider', 'page', 'normal', 'high' );
}

function cd_meta_box_masterslider()
{
// $post is already set, and contains an object: the WordPress post
global $post;
$values = get_post_custom( $post->ID );
$text = isset( $values?['my_meta_box_masterslider'] ) ? $values['my_meta_box_masterslider'] [0] ) :''; 

// We'll use this nonce field later on when saving.
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>

<p>
    Falls ein individueller Slider auf der Seite platziert werden soll, bitte hier den Shortcode platzieren.<br />
</p> 
<p>
    <label for="my_meta_box_masterslider">Masterslider Shortcode</label>
    <input name="my_meta_box_masterslider" type="text" value="<?php echo get_post_meta($object->ID, "my_meta_box_masterslider", true); ?>">
</p>

<?php    
}

add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id )
{
// Bail if we're doing an auto save
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

// if our nonce isn't there, or we can't verify it, bail
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;

// if our current user can't edit this post, bail
if( !current_user_can( 'edit_post', $post_id ) ) return;

// now we can actually save the data
$allowed = array( 
    'a' => array( // on allow a tags
        'href' => array() // and those anchors can only have href attribute
    )
);

if( isset( $_POST['my_meta_box_masterslider'] ) )
    update_post_meta( $post_id, 'my_meta_box_masterslider', esc_attr( $_POST['my_meta_box_masterslider'], $allowed ) );

}

?>

Solution n°1 trouvée

La fonction cd_meta_box_masterslider a quelques problèmes :

  • Il y a un parasite ) dans votre ligne $text =
  • La valeur que vous avez pour l’entrée ne fonctionnera pas car elle fait référence à quelque chose qui n’existe pas
  • Enfin, quelque chose d’étrange se passe avec la ligne $text = – je l’ai réécrit et ça semble maintenant correct

Code complet mis à jour pour que vous puissiez l’utiliser…

function cd_meta_box_masterslider()
{
// $post is already set, and contains an object: the WordPress post
global $post;
$values = get_post_custom( $post->ID );
$text = isset($values['my_meta_box_masterslider']) ? $values['my_meta_box_masterslider'][0] : null;

// We'll use this nonce field later on when saving.
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>

<p>
    Falls ein individueller Slider auf der Seite platziert werden soll, bitte hier den Shortcode platzieren.<br />
</p> 
<p>
    <label for="my_meta_box_masterslider">Masterslider Shortcode</label>
    <input name="my_meta_box_masterslider" type="text" value="<?php echo $text; ?>">
</p>

<?php    
}

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 *