J'ai un menu déroulant de sélection dans ma méta-boîte personnalisée dans la zone d'administration. Il offre deux options approuvées et en cours . Lorsque je sélectionne une option et la sauvegarde, la base de données est mise à jour, mais la valeur dans la zone d'administration ne l'est pas. Ce que je vois est le premier élément de la liste affichée dans la zone de sélection. c’est-à-dire que si je sélectionne en cours et enregistre l’administrateur affiche approuvé en tant que valeur sélectionnée même s’il est enregistré en tant que En cours dans la base de données et affiche En cours au début du site.
Voici mon code:
<label for="myplugin_meta_box_select">Status:</label>
<select name="myplugin_meta_box_select" id="myplugin_meta_box_select">
<option value="Approved" <?php selected( $selected, 'approved' ); ?>>Approved</option>
<option value="In Progress" <?php selected( $selected, 'inprogress' ); ?>>In Progress</option>
</select>
Et je le sauve avec ceci:
if( isset( $_POST['myplugin_meta_box_select'] ) )
update_post_meta( $post_id, 'myplugin_meta_box_select', esc_attr( $_POST['myplugin_meta_box_select'] ) );
Qu'est-ce que j'ai manqué?
Le deuxième paramètre de selected()
doit correspondre à l'attribut value
du <option>
en cours. Donc, en supposant que vous ayez bourré $selected
avec la valeur donnée par la get_post_meta()
correspondante, les opérations suivantes devraient fonctionner pour vous:
<label for="myplugin_meta_box_select">Status:</label>
<select name="myplugin_meta_box_select" id="myplugin_meta_box_select">
<option value="Approved" <?php selected( $selected, 'Approved' ); ?>>Approved</option>
<option value="In Progress" <?php selected( $selected, 'In Progress' ); ?>>In Progress</option>
</select>
Note latérale: Je préférerais personnellement utiliser la version "lente" (c'est-à-dire inprogress
au lieu de In Progress
) pour l'attribut value
(et donc pour la méta valeur de la publication), mais vous auriez faire des changements sur votre front-end aussi.
C'est ce qui a fonctionné pour moi à la fin. J'ai utilisé cela pour ajouter un metabox:
<?php add_action( 'add_meta_boxes', 'so_custom_meta_box' );
function so_custom_meta_box($post){
add_meta_box('so_meta_box', 'Additional', 'custom_element_grid_class_meta_box', 'event', 'normal' , 'high');
}
add_action('save_post', 'so_save_metabox');
function so_save_metabox(){
global $post;
if(isset($_POST["custom_element_grid_class"])){
$region = $_POST['region_sel'];
update_post_meta($post->ID, 'region_sel_meta_box', $region);
}
}
function custom_element_grid_class_meta_box($post){
$region = get_post_meta($post->ID, 'region_sel_meta_box', true);
?>
<label>Region: </label>
<select name="region_sel" id="region_sel">
<option value="Region1" <?php selected( $region, 'Region1' ); ?>>Region1</option>
<option value="Region2" <?php selected( $region, 'Region2' ); ?>>Region2</option>
</select>
<?php } ?>