web-dev-qa-db-fra.com

Enregistrer un tableau à partir de la liste déroulante dans la boîte méta personnalisée

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'] ) );
}
1
souporserious

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:

2
brasofilo