J'ai réussi à extraire un type de message personnalisé dans un menu déroulant se trouvant dans une boîte méta personnalisée. Toutefois, lors de son affichage au début, je souhaiterais également fournir un lien vers le message en question, pas seulement le nom du message. Donc, je suppose que je dois sauvegarder cela en tant que tableau? Est-ce possible grâce à un menu déroulant? Confus sur la façon dont je devrais aborder cela. Toute aide est grandement appréciée.
Voici ce que j'ai jusqu'à présent:
// Add Meta Box To Select Overseeing Pastor
add_action('admin_init', 'ministry_select_add_meta');
function ministry_select_add_meta(){
add_meta_box('ministry_select_post', __('Overseeing Pastor'), 'ministry_select_meta', 'ministry', 'side');
}
function ministry_select_meta( $post ) {
$values = get_post_custom( $post->ID );
$selected = isset( $values['pastor_select'] ) ? esc_attr( $values['pastor_select'][0] ) : '';
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>
<select name="pastor_select">
<?php
$args = array(
'post_type' => 'employee',
'position' => 'pastor'
);
$pastorList = new WP_Query($args); while ($pastorList->have_posts()) : $pastorList->the_post();
$is_selected = (get_the_title() == $selected) ? 'selected="selected"' : '';
echo '<option value="'.get_the_title().'" '.$is_selected.'>'.get_the_title().'</option>';
endwhile; wp_reset_postdata();
?>
</select>
<?php
}
add_action( 'save_post', 'ministry_select_save' );
function ministry_select_save( $post_id )
{
// Stop If Autosaving
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// Stop If Nonce Can't Be Verified
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// Stop If Unauthorized User
if( !current_user_can( 'edit_post' ) ) return;
// Make Sure Data Is Set Then Save
if( isset( $_POST['pastor_select'] ) )
update_post_meta( $post_id, 'pastor_select', esc_attr( $_POST['pastor_select'] ) );
}
Assez facile. Au lieu d'enregistrer le titre de l'article, enregistrez l'ID de l'article afin que vous puissiez extraire toutes les informations nécessaires.
Comme suit: get_post( $the_saved_ID_value );
ou get_permalink( $the_saved_ID_value );
.
Dans votre code, changez cette ligne:
echo '<option value="'.get_the_ID().'" '.$is_selected.'>'.get_the_title().'</option>';
Remarques:
Utiliser un WP_Query
semble un peu trop, considérons get_posts
. Beaucoup de bons exemples pour add_meta_box
.
Au lieu de get_post_custom
, cochez get_post_meta
.