web-dev-qa-db-fra.com

metabox select - affichage frontal

Bonjour, j'ai acheté un thème, mais je dois ajouter quelques champs à un formulaire de soumission front-end. J'ai ajouté les métaboxes et ils fonctionnent, mais le problème est le type choisi de métaboxes.

J'ai cloné un groupe de formulaires sélectionnés qui récupère les données des taxonomies postales, mais je ne sais pas comment le modifier pour le "saisir" les données du tableau "items".

Voici mon metabox:

array(
    'type'  => 'select',
    'name'  => 'resume_change_location',
    'label' => __( 'Are you willing to change location?', 'jobboard' ),
    'description'   => __( '' ),
    'items' => array(
        array(
            'value' => 'yes',
            'label' => __( 'Yes', 'jobboard' ),
        ),
        array(
            'value' => 'no',
            'label' => __( 'No', 'jobboard' ),
        ),
    ),

),

Voici le menu déroulant pour les données de taxonomie (travail):

<select name="job_type" id="job_type" class="form-control">
                            <option value=""><?php echo '-- '.__( 'Select Type', 'jobboard' ).' --'; ?></option>
                        <?php
                            $terms = get_terms( 'job_type', array( 'hide_empty' => false, ) );
                            foreach( $terms as $term ){
                                $selected = '';
                                if( $default['job_type'] == $term->slug ){
                                    $selected = 'selected';
                                }
                                echo '<option value="'.$term->slug.'" '.$selected.'>'.esc_attr($term->name).'</option>';
                            }
                        ?>
                        </select>

J'aimerais afficher le menu déroulant avec les éléments de ma métabox ... voici ce que j'ai obtenu mais il ne montre pas mes éléments (il affiche le menu déroulant mais avec des options vides)

<select class="form-control" name="change">
                        <option value=""><?php _e( 'Select', 'jobboard' ); ?></option>
                    <?php
                        $change = get_post_meta($post->ID, $key, 'resume_change_location', true);
                        foreach( $change as $key){
                            $selected = '';
                            if( $key->name == $default['resume_change_location'] ){
                                $selected = 'selected="selected"';
                            }//endif;
                            echo '<option value="'.$key->name.'" '.$selected.'>'.esc_attr($key->name).'</option>';
                        }
                    ?>
                    </select>   

J'ai cherché un moyen de faire ce travail pendant environ 3 heures sans chance ... Toute aide est très appréciée.

1
Cynthia Lara
$change = get_post_meta($post->ID, $key, 'resume_change_location', true);

De https://developer.wordpress.org/reference/functions/get_post_meta/

get_post_meta retourne un tableau, pas un objet, vous devez donc utiliser $ change ['index']

L'autre chose est dans votre boîte à méta que vous semblez enregistrer une chaîne et non un tableau donc foreach va échouer.

Le ci-dessous devrait fonctionner ...

    $change = get_post_meta( $post->ID, $key, 'resume_change_location', true );
    <option value=""><?php _e( 'Select', 'jobboard' ); ?></option>
    <option value="Yes"<?php selected( 'Yes', $default['resume_change_location'] ); ?>>Yes</option>
    <option value="No"<?php selected( 'No', $default['resume_change_location'] ); ?>>No</option>
    </select>

Notez également mon utilisation de la fonction intégrée de WordPress sélectionnée - https://codex.wordpress.org/Function_Reference/selected

1
Mike