Voici ce que j'essaie essentiellement d'accomplir:
Voici ce que j'essaie de faire: chaque fois que je crée un nouveau post "CITATIONS", je veux pouvoir choisir la page sur laquelle ce post doit être placé. J'ai décidé de le faire en créant une nouvelle métabox sur la page de publication "citations" et en listant toutes les pages de cette métabox, avec une case à cocher devant elles:
Tout va bien, mais maintenant je ne sais pas comment sauvegarder ces cases à cocher.
Voici la fonction que j'utilise pour imprimer le contenu de la métabox:
function myplugin_inner_custom_box( $post ) {
$custom = get_post_custom($post->ID);
$checkfield = $custom["checkfield"][0];
// Nonce to verify intention later
wp_nonce_field( 'save_quote_meta', 'custom_nonce' );
$pages = get_pages();
foreach ( $pages as $page ) { ?>
<input type="checkbox" name="checkfield_<?php echo $page->ID; ?>" value="yes" <?php if ($checkfield == 'yes') { ?> checked <?php } ?> /> <?php echo $page->post_title; ?> <br>
<?php
}
}
Et voici la fonction que j'utilise pour les sauvegarder:
//save the meta box action
add_action( 'save_post', 'myplugin_meta_save' );
//save the meta box
function myplugin_meta_save()
{
global $post;
update_post_meta($post->ID, 'checkfield', $_POST['checkfield'] );
}
Évidemment, cela ne fonctionne pas - je ne sais pas comment sauvegarder toutes les valeurs de ces champs de contrôle.
Vous utilisez checkfield_<?php echo $page->ID; ?>
comme nom pour vos champs de saisie, puis vous essayez de sauvegarder $_POST['checkfield']
qui est not set.
Vous pouvez effectuer la même boucle $pages
sur la fonction myplugin_meta_save()
, puis enregistrer les données de chaque page en tant qu'entrée meta_key
distincte (checkfield_1
, checkfield_5
, etc.), OR, vous pouvez enregistrer toutes ces données dans un seul meta_key
qui est checkfield
dans ce cas, et un petit ajustement de votre code est nécessaire pour y parvenir:
function myplugin_inner_custom_box( $post ) {
// we store data as an array, we need to unserialize it
$checkfield = maybe_unserialize( get_post_meta($post->ID, "checkfield", true) );
// Nonce to verify intention later
wp_nonce_field( 'save_quote_meta', 'custom_nonce' );
$pages = get_pages();
foreach ( $pages as $page ) { ?>
<input id="page_<?php echo $page->ID; ?>" type="checkbox" name="checkfield[]" value="<?php echo $page->ID; ?>" <?php if ( in_array($page->ID, (array) $checkfield) ) { ?> checked <?php } ?>/> <label for="page_<?php echo $page->ID; ?>"><?php echo $page->post_title; ?></label> <br>
<?php
}
}
//save the meta box action
add_action( 'save_post', 'myplugin_meta_save', 10, 2 );
//save the meta box
function myplugin_meta_save($post_id, $post)
{
if ( isset($_POST['checkfield']) ) { // if we get new data
update_post_meta($post_id, "checkfield", $_POST['checkfield'] );
}
}
Notez que name="checkfield"
dans le champ de saisie est remplacé par name="checkfield[]"
, ce qui rendra les données stockées sous forme de tableau dans la variable $_POST['checkfield']
. De même, l'attribut value
est passé de yes
à $page->ID
.
Mise à jour: cast checkfield
à array
: if ( in_array($page->ID, (array) $checkfield) )