Trong các dự án plugin thường có phần settings và chúng ta thương lưu dữ liệu vào table option của wordpress, hôm này mình sẽ chia sẽ code để làm việc này, nó sẽ như hình bên dưới
dự liệu là object cho form setting và nút lưu
1 2 3 4 5 6 7 |
data: function () { return { settingsText: '<i class="fa fa-floppy-o" aria-hidden="true"></i> Lưu', settings:{ } } } |
Ví dụ sau này anh chị muốn thêm một setting mới thì chỉ cần v-model=”settings.newSetting” kiểu như vậy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<div id="settings"> <div class="row q-col-gutter-md q-mb-md"> <div class="col-7"> <h1 style="font-size: 20px; font-weight: 700; margin-bottom:20px; line-height: 1;">Cài đặt</h1> <div style="margin-bottom:20px;"> <q-input outlined v-model="settings.autoDeleteSearchHistoryAfter" label="Tự động xóa lịch sử tìm kiếm sau (đơn vị: tháng)" /> </div> <div style="margin-bottom:20px;"> <q-input outlined v-model="settings.test" label="test" /> </div> <div><button class="custom-btn" @click="autoDeleteSearchHistoryAfterSave" v-html="settingsText" ></button></div> </div> </div> |
Tất nhiên code này muốn sử dụng được phải import thư viện vue js 2x , axios và quasar cho phần ui
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<script type="module"> const AJAX_URL = '<?php echo admin_url('admin-ajax.php'); ?>' new Vue({ el: '#settings', data: function () { return { settingsText: '<i class="fa fa-floppy-o" aria-hidden="true"></i> Lưu', settings:{ } } }, methods:{ NOTIFY(msg, type = 1){ this.$q.notify({ message: msg, color: type == 1 ? 'green' : 'red', position: 'top', timeout: 2000 }) }, buildFormData(formData, data, parentKey) { if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) { Object.keys(data).forEach(key => { this.buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key); }); } else { const value = data == null ? '' : data; formData.append(parentKey, value); } }, jsonToFormData(data) { const formData = new FormData(); this.buildFormData(formData, data); return formData; }, autoDeleteSearchHistoryAfterSave(){ this.settingsText = '<i class="fa fa-spinner fa-spin"></i> Lưu' axios.post( AJAX_URL, this.jsonToFormData({ action: 'autoDeleteSearchHistoryAfterSave', settings: this.settings }) ).then(res => { const response = res.data this.settingsText = '<i class="fa fa-floppy-o" aria-hidden="true"></i> Lưu' this.NOTIFY("Đã lưu thành công!",1) console.log(response) }) }, loadSettings(){ axios.post( AJAX_URL, this.jsonToFormData({ action: 'loadSettings', }) ).then(res => { const response = res.data.data this.settings = response console.log(response) }) } }, watch:{ }, created(){ this.loadSettings() } }) </script> |
Tất nhiên đây là 2 function ajax nên anh chị cần add_action(“wp_ajax_
1 2 3 4 5 6 7 8 9 10 |
add_action("wp_ajax_loadSettings", "loadSettings"); add_action("wp_ajax_autoDeleteSearchHistoryAfterSave", "autoDeleteSearchHistoryAfterSave"); function loadSettings(){ $stocksSettings = !empty(get_option("stocksSettings")) ? get_option("stocksSettings") : array(); wp_send_json_success($stocksSettings); } function autoDeleteSearchHistoryAfterSave(){ update_option('stocksSettings', (array) $_POST['settings']); wp_send_json_success($_POST['settings']); } |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress