Не сохраняется «0»
-
Здравствуйте.
Хочу сделать фильтр по дополнительным полям.
Сделал эти поля, все хорошо, кроме того что если в поле вставляю 0, то это значение не сохраняется и, соответственно, по этому нулю фильтровать тоже не получается (
wp_nonce_field( $this->options['id'], $this->options['id'].'_wpnonce', false, true );
-
Тема изменена 5 лет, 4 месяца назад пользователем
IgorIvanov.
-
Тема изменена 5 лет, 4 месяца назад пользователем
Просмотр 3 ответов — с 1 по 3 (всего 3)
-
своих мозгов мало, поэтому изначальный код для вставки дополнительных полей «нагуглил»:
class trueMetaBox { function __construct($options) { $this->options = $options; $this->prefix = $this->options['id'] .'_'; add_action( 'add_meta_boxes', array( &$this, 'create' ) ); add_action( 'save_post', array( &$this, 'save' ), 1, 2 ); } function create() { foreach ($this->options['post'] as $post_type) { if (current_user_can( $this->options['cap'])) { add_meta_box($this->options['id'], $this->options['name'], array(&$this, 'fill'), $post_type, $this->options['pos'], $this->options['pri']); } } } function fill(){ global $post; $p_i_d = $post->ID; wp_nonce_field( $this->options['id'], $this->options['id'].'_wpnonce', false, true ); ?> <table class="form-table"><tbody><?php foreach ( $this->options['args'] as $param ) { if (current_user_can( $param['cap'])) { ?><tr><?php if(!$value = get_post_meta($post->ID, $this->prefix .$param['id'] , true)) $value = $param['std']; switch ( $param['type'] ) { case 'text':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'number':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'textarea':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <textarea name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="large-text" /><?php echo $value ?></textarea><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'checkbox':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <label for="<?php echo $this->prefix .$param['id'] ?>"><input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"<?php echo ($value=='on') ? ' checked="checked"' : '' ?> /> <?php echo $param['desc'] ?></label> </td> <?php break; } case 'select':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <label for="<?php echo $this->prefix .$param['id'] ?>"> <select name="<?php echo $this->prefix .$param['id'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"><option>...</option><?php foreach($param['args'] as $val=>$name){ ?><option value="<?php echo $val ?>"<?php echo ( $value == $val ) ? ' selected="selected"' : '' ?>><?php echo $name ?></option><?php } ?></select></label><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } } ?></tr><?php } } ?></tbody></table><?php } function save($post_id, $post){ if ( !wp_verify_nonce( $_POST[ $this->options['id'].'_wpnonce' ], $this->options['id'] ) ) return; if ( !current_user_can( 'edit_post', $post_id ) ) return; if ( !in_array($post->post_type, $this->options['post'])) return; foreach ( $this->options['args'] as $param ) { if ( current_user_can( $param['cap'] ) ) { if ( isset( $_POST[ $this->prefix . $param['id'] ] ) && trim( $_POST[ $this->prefix . $param['id'] ] ) ) { update_post_meta( $post_id, $this->prefix . $param['id'], trim($_POST[ $this->prefix . $param['id'] ]) ); } else { delete_post_meta( $post_id, $this->prefix . $param['id'] ); } } } } }
Попробуйте убрать эту часть условия:
&& trim( $_POST[ $this->prefix . $param['id'] ] )
Она отвечает за то, чтобы сохранялись только непустые значения, а ноль считается пустым.
пробовал, почему-то не получается((
Просмотр 3 ответов — с 1 по 3 (всего 3)
- Тема «Не сохраняется «0»» закрыта для новых ответов.