Поддержка Проблемы и решения Как не сохранять пустые данные из Metabox новой записи

  • Всем привет!
    Брал из кодекса стандартный код, который добавляет метабокс дополнительные данные для записи, проблема в том, что если данные в них не заполнять, после создания новой записи, в базу данных все равно добавляется ключ метабокса с пустым значением.
    Например, есть 2 поля: meta1 и meta2, если в meta1 есть значение — сохранить в базу, а если в meta2 нет значения, то его не нужно сохранять, даже не сохраняя сам ключ meta2

    <?php
    function meta_boxes() {
    	add_meta_box('meta_box', 'Метабокс', 'meta_function', 'post', 'normal', 'high');
    }
    add_action( 'admin_menu', 'meta_boxes' );
    
    function meta_function($post) {
    	wp_nonce_field( basename( __FILE__ ), 'meta__nonce' );
    ?>
    <div class="meta-field-box">
    <label>Meta 1</label>
    <input type="text" name="meta1" value="<?php echo get_post_meta($post->ID, 'meta1',true) ?>" />
    </div>
    
    <div class="meta-field-box">
    <label>Meta 2</label>
    <input type="text" name="meta2" value="<?php echo get_post_meta($post->ID, 'meta2',true) ?>" />
    </div>
    
    <?php
    }
    
    function fields_save ( $post_id ) {
    	if ( !isset( $_POST['meta__nonce'] )
    	|| !wp_verify_nonce( $_POST['meta__nonce'], basename( __FILE__ ) ) )
    		return $post_id;
    
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
    		return $post_id;
    
    	if ( !current_user_can( 'edit_post', $post_id ) )
    		return $post_id;
    	$post = get_post($post_id);
    
    	if ($post->post_type == 'post') {
    		update_post_meta($post_id, 'meta1', wp_strip_all_tags($_POST['meta1']));
    		update_post_meta($post_id, 'meta2', wp_strip_all_tags($_POST['meta2']));
    	}
    
    	return $post_id;
    }
    add_action('save_post', 'fields_save');

    Как можно реализовать такое сохранение?

Просмотр 1 ответа (всего 1)
  • Модератор Yuri

    (@yube)

    Скажем, так:

    if ( $_POST['meta2'] == '' ) delete_post_meta($post_id, 'meta2');
    else update_post_meta($post_id, 'meta2', wp_strip_all_tags($_POST['meta2']));
    
Просмотр 1 ответа (всего 1)
  • Тема «Как не сохранять пустые данные из Metabox новой записи» закрыта для новых ответов.