salut tout le monde sait comment puis-je ajouter une autre méta-boîte et enregistrer les données dans des champs personnalisés différents, en utilisant le code ci-dessous.
<?php
function add_meta_boxes() {
add_meta_box(
'repeatable-fields',
'Audio Playlist',
'repeatable_meta_box_display',
'post',
'normal',
'high');
}
add_action('admin_menu', 'add_meta_boxes');
function repeatable_meta_box_display() {
global $custom_meta_fields, $post;
wp_nonce_field( 'repeatable_meta_box_nonce', 'repeatable_meta_box_nonce' );
//$repeatable_fields = get_post_meta($post->ID, $prefix, true);
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.metabox_submit').click(function(e) {
e.preventDefault();
$('#publish').click();
});
$('#add-row').on('click', function() {
var row = $('.empty-row.screen-reader-text').clone(true);
row.removeClass('empty-row screen-reader-text');
row.insertBefore('#repeatable-fieldset-one tbody>tr:last');
return false;
});
$('.remove-row').on('click', function() {
$(this).parents('tr').remove();
return false;
});
$('#repeatable-fieldset-one tbody').sortable({
opacity: 0.6,
revert: true,
cursor: 'move',
handle: '.sort'
});
});
</script>
<?php
$meta = get_post_meta($post->ID, 'custom_audio', true);
?>
<table id="repeatable-fieldset-one" width="100%">
<thead>
<tr>
<th width="2%"></th>
<th width="30%">Name</th>
<th width="60%">URL</th>
<th width="2%"></th>
</tr>
</thead>
<tbody>
<?php
if ( $meta ) {
foreach ( $meta as $field ) {
?>
<tr>
<td><a class="button remove-row" href="#">-</a></td>
<td><input type="text" class="widefat" name="name[]" value="<?php if($field['name'] != '') echo esc_attr( $field['name'] ); ?>" /></td>
<td><input type="text" class="widefat" name="url[]" value="<?php if ($field['url'] != '') echo esc_attr( $field['url'] ); else echo 'http://'; ?>" /></td>
<td><a class="sort">|||</a></td>
</tr>
<?php
}
} else {
// show a blank one
?>
<tr>
<td><a class="button remove-row" href="#">-</a></td>
<td><input type="text" class="widefat" name="name[]" /></td>
<td><input type="text" class="widefat" name="url[]" value="http://" /></td>
<td><a class="sort">|||</a></td>
</tr>
<?php } ?>
<!-- empty hidden one for jQuery -->
<tr class="empty-row screen-reader-text">
<td><a class="button remove-row" href="#">-</a></td>
<td><input type="text" class="widefat" name="name[]" /></td>
<td><input type="text" class="widefat" name="url[]" value="http://" /></td>
<td><a class="sort">|||</a></td>
</tr>
</tbody>
</table>
<p><a id="add-row" class="button" href="#">Add another</a>
<input type="submit" class="metabox_submit" value="Save" />
</p>
<?php
}
add_action('save_post', 'repeatable_meta_box_save');
function repeatable_meta_box_save($post_id) {
global $custom_meta_fields;
if ( ! isset( $_POST['repeatable_meta_box_nonce'] ) ||
! wp_verify_nonce( $_POST['repeatable_meta_box_nonce'], 'repeatable_meta_box_nonce' ) )
return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (!current_user_can('edit_post', $post_id))
return;
// loop through fields and save the data
$old = get_post_meta($post_id, 'custom_audio', true);
$new = array();
$names = $_POST['name'];
$urls = $_POST['url'];
$count = count( $names );
for ( $i = 0; $i < $count; $i++ ) {
if ( $names[$i] != '' ) :
$new[$i]['name'] = stripslashes( strip_tags( $names[$i] ) );
if ( $urls[$i] == 'http://' )
$new[$i]['url'] = '';
else
$new[$i]['url'] = stripslashes( $urls[$i] ); // and however you want to sanitize
endif;
}
if ( !empty( $new ) && $new != $old )
update_post_meta( $post_id, 'custom_audio', $new );
elseif ( empty($new) && $old )
delete_post_meta( $post_id, 'custom_audio', $old );
} ?>
function add_meta_boxes() { add_meta_box( 'repeatable-fields', 'Audio Playlist', 'repeatable_meta_box_display', 'post', 'normal', 'high'); add_meta_box( 'wpa-45985', 'Wordpress Answers Metabox', 'wpa_meta_box_display', 'post', 'normal', 'high'); } add_action('admin_menu', 'add_meta_boxes');
il suffit de définir une 2ème métabox, puis de définir sa fonction d’affichage et sa fonction de sauvegarde. c'est exactement le meme. SAUF, si vous voulez l'enregistrer en tant que méta-entrée différente, vous modifierez l'attribut name pour toutes les nouvelles entrées.
par exemple: votre première métabox a le nom = "custom_audio []", donc pour enregistrer la deuxième boîte dans une méta entrée différente, vous devez nommer les méta entrées différemment
<input type="text" name="wpa_45985['input1']" />
<input type="text" name="wpa_45985['input2']" />
et toute votre méta dans cette case sera sauvegardée dans la clé méta wpa_45985
edit # 1: ajout d’affichage et sauvegarde des rappels. vous devriez ajouter un peu d'assainissement des données à la fonction de sauvegarde, mais cela devrait être un bon début
function wpa_meta_box_display() {
global $post;
wp_nonce_field( 'wpa_45985', 'wpa_45985_nonce' );
$meta = get_post_meta($post->ID, 'wpa_45985', true);
$foo = isset($meta[foo]) ? $meta[foo] : '';
$bar = isset($meta[bar]) ? $meta[bar] : '';
?>
<input type="text" class="widefat" name="wpa_45985[foo]" value="<?php echo $foo; ?>"/>
<input type="text" class="widefat" name="wpa_45985[bar]" value="<?php echo $bar; ?>"/>
<?php
}
add_action('save_post', 'wpa_meta_box_save');
function wpa_meta_box_save($post_id) {
global $custom_meta_fields;
if ( ! isset( $_POST['wpa_45985_nonce'] ) ||
! wp_verify_nonce( $_POST['wpa_45985_nonce'], 'wpa_45985' ) )
return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (!current_user_can('edit_post', $post_id))
return;
update_post_meta($post_id,'wpa_45985',$_POST['wpa_45985']);
} ?>