У меня есть WordPress-пост, в котором отображается форма, состоящая из нескольких перечисленных песен, каждая песня имеет 2 переключателя («Play» и «Don't Play»).
Я хочу сохранить данныеэти переключатели в моей базе данных как 2 набора сериализованных данных, т.е. если установлен переключатель «Play»
1: do_play = название песни 1 2: do_play = название песни 2 3: do_play = название песни 34: do_play = название песни 4 5: do_play = название песни 5
a:5:{i:0;s:11:"Song name 1";i:1;s:11:"Song name 2";i:2;s:11:"Song name 3";i:3;s:11:"Song name 4";i:4;s:11:"Song name 5";}
И для песен, выбранных из «Не играть», то же самое, но в другой строке БД:
1: do_play = название песни 6 2: do_play = название песни 7 3: do_play = название песни 8 4: do_play = название песни 9 5: do_play = название песни 10
a:5:{i:0;s:11:"Song name 6";i:1;s:11:"Song name 7";i:2;s:11:"Song name 8";i:3;s:11:"Song name 9";i:4;s:11:"Song name 10";}
Я хочу сделать эточерез AJAX и добавьте записи в таблицу wp_postmeta.Вот пример моей формы html:
<form id="songChoices-12028" method="POST">
<input type="hidden" id="booking_id" name="booking_id" value="12028">
<ul class="setlist_container">
<li class="song_entry ">Ain’t No Sunshine -
<em>Bill Withers</em>
<br>
<input type="radio" id="doPlay" name="songChoice-397">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-397">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry ">No Diggity -
<em>Blackstreet</em>
<br>
<input type="radio" id="doPlay" name="songChoice-12036">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-12036">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry 7-8-piece drinks-reception">Pricetag -
<em>Jessie J</em>
<br>
<input type="radio" id="doPlay" name="songChoice-12038">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-12038">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry 4-5-piece">Rehab -
<em>Amy Winehouse</em>
<br>
<input type="radio" id="doPlay" name="songChoice-12039">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-12039">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry 4-5-piece">Rolling in the Deep -
<em>Adele</em>
<br>
<input type="radio" id="doPlay" name="songChoice-12035">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-12035">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry 4-5-piece">Sittin’ on the Dock of the Bay -
<em>Otis Redding</em>
<br>
<input type="radio" id="doPlay" name="songChoice-398">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-398">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
<li class="song_entry 4-5-piece">Summer of ’69 -
<em>Bryan Adams</em>
<br>
<input type="radio" id="doPlay" name="songChoice-12037">
<label for="doPlay">Do</label>
<input type="radio" id="dontPlay" name="songChoice-12037">
<label for="dontPlay">Don't</label>
<a href="#" id="clear-button">Clear</a>
</li>
</ul>
</form>
Затем в моем файле ajax JS у меня есть:
var response;
// AJAX for song request details
$('form[id^="songChoice-"]').on('change', function(e) {
e.preventDefault();
$.post( update_user_info.ajaxurl, {
action : 'update_user_setlist',
nonce : update_user_info.nonce,
post : $(this).serialize()
},
function(response) {
console.log(response);
responseSuccess(response);
});
return false;
});
Затем, что наиболее важно, функция, которая обрабатывает отправку данных вDB:
function updateSetlistInfo() {
if(empty($_POST) || !isset($_POST)) {
self::ajaxStatus('error', 'Nothing to update.');
} else {
$data = $_POST;
$dataString = $data['post'];
parse_str($dataString, $dataArray);
$nonce = $data['nonce'];
if(wp_verify_nonce($nonce, 'update_user_info') !== false) {
$user_ID = get_current_user_id();
$post_id = $dataArray['booking_id'];
//$dataArray['user_addressLine1'] = isset($dataArray['user_addressLine1']) ? $dataArray['user_addressLine1'] : false;
if($user_ID != NULL) {
foreach($dataArray as $key=>$value) {
$status = update_post_meta($post_id, $key, $value);
}
self::ajaxStatus('success', 'Meta fields updated.', $dataArray);
} else {
self::ajaxStatus('error', 'You are unauthorized to perform this action.', $dataArray);
}
} else {
self::ajaxStatus('error', 'Nonce check cannot fail.');
}
}
}
Вышеприведенное взято из другой формы на моей странице, которая передает информацию об адресе пользователя через ajax в базу данных.Тем не менее, это просто добавляет новую строку для каждого элемента формы - я хочу иметь 2 строки, "do_play" и "dont_play" и создать массив сериализованных данных внутри них.любые предложения будут очень полезны на этом этапе, так как я немного застрял