Почему значения настраиваемых полей удаляются?

Я создал пользовательский тип записей «Продукты», который также имеет пользовательские поля «Цена» и «Доставка». Иногда, если я оставляю окно редактирования продукта открытым или обновляю его, то теряются значения внутри цены и доставки. Может кто-нибудь что посоветует по этому поводу?

add_action('save_post', 'save_details'); 
function save_details()
{ 
    global $post;
    update_post_meta($post->ID, "price",        $_POST["price"]        );
    update_post_meta($post->ID, "shipping",     $_POST["shipping"]     );
    update_post_meta($post->ID, "long_title",   $_POST["long_title"]   );
    update_post_meta($post->ID, "upload_image", $_POST["upload_image"] );
}

Понравилась статья? Поделиться с друзьями:
WPAsk
Ответов: 4
  1. fuxia

    Проверьте переменные перед работой с ними. Ваша функция сохранения получает параметр $post_id. Используйте его.

    Из класса meta box для флажка:

    /**
     * Saves the content to the post meta.
     *
     * @return void
     */
    public function save( $post_id )
    {
        $this->is_allowed_save( $post_id ) and
            update_post_meta( $post_id, $this->vars['key'],
                empty ( $_POST[ $this->vars['key'] ] ) ? 'off' : 'on' );
    }
    
    /**
     * Checks if we should trigger the save action.
     *
     * @param  int  $post_id
     * @return bool
     */
    protected function is_allowed_save( $post_id )
    {
        // Проверка целостности, правильности действий и разрешений
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        {
            return FALSE;
        }
        if ( ! wp_verify_nonce( $this->nonce, $this->vars['title'] ) )
        {
            return FALSE;
        }
        if (    ! current_user_can( 'edit_post', $post_id )
            and ! current_user_can( 'edit_page', $post_id )
        )
        {
            return FALSE;
        }
    
        return TRUE;
    }
    

    Как вы можете видеть, DOING_AUTOSAVE — это то, чего вы хотите избежать. Авторизация — следующий шаг. В противном случае кто-нибудь может разместить что-нибудь в свой блог. И подготовьте данные, прежде чем вставлять их в БД.

    1. MF1

      Спасибо!

    2. MF1

      Кроме того, веб-сайт, который я создаю, не является блогом. Это CMS, в которую только владелец сайта будет вносить изменения после входа в систему.

    3. fuxia♦

      Это просто пример кода. Обычно я реализую два уровня абстракции. Но он должен показать вам, как это работает.

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: