WP Metaboxes Multi Select обновление, получить актуальный - PullRequest
0 голосов
/ 22 февраля 2020

Последнее, что в данный момент не работает в моем плагине - это поле для выбора нескольких элементов. Показано, что элементы можно выбирать, но обновление сообщения 1) не сохраняет выбранные значения и 2) не загружает их при входе на экран редактирования.

Мой код:

<?php
// METABOX I Diet Information

function diet_add_meta_box1() {
    add_meta_box( 'diet_meta_box1', __( 'Diet Information', 'nutriplus' ), 'diet_build_meta_box1', "np-diet", "side", "high", null);
    }
add_action( 'add_meta_boxes', 'diet_add_meta_box1' );

/**
 * Build custom field METABOX I
 *
 * @param post $post The post object
 */

function diet_build_meta_box1( $post ){
    // make sure the form request comes from WordPress
    wp_nonce_field( basename( __FILE__ ), 'diet_meta_box1_nonce' );

    // retrieve the current values

$current_diet_goals = get_post_meta( $post->ID, '_diet_diet_goals', false );
?>
<div>
    <label for="diet-goals" class="np-label"><strong><?php _e( 'Diet Goals', 'nutriplus' ) ?></strong></label>
    <p>
    <select name="diet_goals[]" id="np-dropdown" class="np-dropdown" multiple>
        <option value="build-body" <?php selected( in_array( 'build-body', $current_diet_goals, true ) ); ?>><?php _e( 'Build Body', 'nutriplus' ) ?></option>
        <option value="build-muscle" <?php selected( in_array( 'build-muscle', $current_diet_goals, true ) ); ?>><?php _e( 'Build Muscle', 'nutriplus' ) ?></option>
        <option value="eat-healthy" <?php selected( in_array( 'eat-healthy', $current_diet_goals, true ) ); ?>><?php _e( 'Eat Healthy', 'nutriplus' ) ?></option>
        <option value="gain-weight" <?php selected( in_array( 'gain-weight', $current_diet_goals, true ) ); ?>><?php _e( 'Gain Weight', 'nutriplus' ) ?></option>
        <option value="hold-weight" <?php selected( in_array( 'hold-weight', $current_diet_goals, true ) ); ?>><?php _e( 'Hold Weight', 'nutriplus' ) ?></option>
        <option value="improve-condition" <?php selected( in_array( 'improve-condition', $current_diet_goals, true ) ); ?>><?php _e( 'Improve Condition', 'nutriplus' ) ?></option>
        <option value="improve-performance" <?php selected( in_array( 'improve-performance', $current_diet_goals, true ) ); ?>><?php _e( 'Improve Performance', 'nutriplus' ) ?></option>
        <option value="lose-fat" <?php selected( in_array( 'lose-fat', $current_diet_goals, true ) ); ?>><?php _e( 'Lose Fat', 'nutriplus' ) ?></option>
        <option value="lose-weight" <?php selected( in_array( 'lose-weight', $current_diet_goals, true ) ); ?>><?php _e( 'Lose Weight', 'nutriplus' ) ?></option>
    </select>
    </p>
    </div>
<?php
}
function diet_save_meta_box1_data( $post_id ){
    // verify meta box nonce
    if ( !isset( $_POST['diet_meta_box1_nonce'] ) || !wp_verify_nonce( $_POST['diet_meta_box1_nonce'], basename( __FILE__ ) ) ){
        return;
    }
    // return if autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){
        return;
    }
  // Check the user's permissions.
    if ( ! current_user_can( 'edit_post', $post_id ) ){
        return;
    }   
    // store custom fields values METABOX1
if ( isset( $_REQUEST['diet_goals'] ) ) {
        $array = array_map( 'sanitize_text_field', wp_unslash( $_POST['diet_goals'] ) );
        update_post_meta( $post_id, '_diet_diet_goals',  $array );
}
}
add_action( 'save_post', 'diet_save_meta_box1_data' );
?>

У меня есть представление о том, что может быть не так. Может быть, эта часть:

$current_diet_goals = get_post_meta( $post->ID, '_diet_diet_goals', false );

Очевидно, функция save_meta, и я думаю, что имя поля тоже. Я много искал в inte rnet, чтобы решить эту проблему, но мне не удалось отразить решения, которые я нашел в своем коде: (

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2020

Вам нужно изменить имя вашего атрибута в select.

Используйте diet_goals[] вместо diet_goals

и измените выбранные функции на:

selected( in_array( 'some-value', $current_diet_goals, true ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...