web-dev-qa-db-ja.com

メタボックス選択 - フロントエンド表示

こんにちは私はテーマを購入しましたが、フロントエンドの送信フォームにいくつかのフィールドを追加する必要があります。私はメタボックスを追加しました、そして、それらは働いています、しかし問題はメタボックスの選択されたタイプです。

ポスト分類からデータを取得する選択フォームグループを複製しましたが、 'items'配列からデータを「取得」するためにそれを微調整する方法はわかりません。

これが私のメタボックスです。

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' ),
        ),
    ),

),

分類データのドロップダウンは次のとおりです(作業中)。

<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>

メタボックス内のアイテムでドロップダウンを表示したいのですが...ここに表示されるのは私のアイテムではありません(ドロップダウンは表示されていますが、オプションは空白です)

<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>   

私は運なしで約3時間この仕事をする方法を探しています...どんな助けでも非常に高く評価されています。

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

から https://developer.wordpress.org/reference/functions/get_post_meta/

get_post_metaはオブジェクトではなく配列を返すので、$ change ['index']を使う必要があります。

他のことはあなたのメタボックスの中であなたは配列ではなく文字列を保存しているように見えるのでforeachは失敗することになるでしょう。

以下はうまくいくはずです...

    $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>

内蔵WordPress選択機能の使用にも注意してください - https://codex.wordpress.org/Function_Reference/selected

1
Mike