Для реализации вашего сценария на WordPress, можно использовать комбинацию PHP и JavaScript (например, с использованием AJAX), а также некоторые базовые функции WordPress для работы с базой данных. Вот как вы можете организовать этот алгоритм:
### 1. Определение структуры базы данных
Вы уже должны иметь таблицу в базе данных с данными, которые хотите обрабатывать. Например, таблица может называться `wp_custom_records` и содержать следующие поля:
- `id` (идентификатор записи)
- `content` (содержимое записи)
- `processed` (флаг, указывающий на то, обработана запись или нет)
### 2. Создание PHP функции для получения записей
Создайте функцию, которая будет получать 10 непросмотренных записей из базы данных:
```php
function get_records($offset) {
global $wpdb;
$table_name = $wpdb->prefix . 'custom_records';
$results = $wpdb->get_results("SELECT * FROM $table_name WHERE processed = 0 LIMIT 10 OFFSET $offset", ARRAY_A);
return $results;
}
```
### 3. Создание AJAX обработчика
Создайте AJAX обработчик для загрузки новых записей. Добавьте следующий код в файл `functions.php` вашей темы:
```php
add_action('wp_ajax_get_new_records', 'get_new_records_callback');
add_action('wp_ajax_nopriv_get_new_records', 'get_new_records_callback');
function get_new_records_callback() {
$offset = isset($_POST['offset']) ? intval($_POST['offset']) : 0;
$records = get_records($offset);
wp_send_json($records);
}
```
### 4. Создание JavaScript для интерактивности
Добавьте следующий JavaScript в вашем шаблоне для обработки событий и взаимодействия с сервером:
```html
<script type="text/javascript">
let currentRecordIndex = 0;
let records = [];
function fetchNewRecords() {
let data = {
'action': 'get_new_records',
'offset': currentRecordIndex
};
jQuery.post(ajaxurl, data, function(response) {
if (response.length) {
records = response;
displayRecord(currentRecordIndex);
}
});
}
function displayRecord(index) {
if (index < records.length) {
// Обновите HTML с записями
document.getElementById('record').innerText = records[index].content;
} else {
// Обработка завершена
alert("Все записи обработаны.");
}
}
function processRecord() {
// Код для обработки записи и записи результата в базу
// Например, изменение флага processed в базе данных на 1
// После обработки:
currentRecordIndex++;
displayRecord(currentRecordIndex);
}
document.addEventListener('DOMContentLoaded', function() {
fetchNewRecords();
document.getElementById('next-button').addEventListener('click', processRecord);
});
</script>
<div id="record"></div>
<button id="next-button">Следующий</button>
```
### 5. Обновление базы данных после обработки записи
Не забудьте написать функцию для обновления записи в базе данных после обработки. Вы можете сделать это через AJAX или же методом использования `wp_update` или `wpdb->update`.
### 6. Хранение состояния
Хранение переменной, указывающей на номер текущей записи, можно реализовать на клиентской стороне (в JavaScript). Таким образом, состояние будет сохраняться в переменной `currentRecordIndex`.
### 7. Переход к следующим записям
При завершении обработки всех текущих записей, вы можете снова вызвать `fetchNewRecords()` для загрузки следующих 10 записей.
### Итог
Этот подход позволяет вам использовать WordPress функции для работы с базой данных, а также применить AJAX для динамического обновления содержимого страницы без перезагрузки. Такой способ обеспечивает хорошую производительность и пользовательский опыт, схожий с Duolingo.