Создание вложенных страниц или разделов в WordPress с использованием плагина Advanced Custom Fields (ACF) может быть немного сложным, но это вполне возможно. Давайте разберем, как решить вашу задачу с динамическим созданием, редактированием и удалением страниц, а также с генерацией ЧПУ-урлов.
### 1. Создание структуры данных с ACF
#### Шаг 1: Создайте пользовательские поля
1. Установите и активируйте ACF.
2. Создайте группу полей для своей страницы (это может быть, например, “Вложенные страницы”).
3. Добавьте нужные поля, такие как “Заголовок”, “Контент”, “Ссылка на родительскую страницу” и другие необходимые данные для вложенных страниц.
#### Шаг 2: Используйте повторители
Если ваши вложенные страницы могут содержать несколько записей, рекомендуется использовать поле типа “Repeater”. Это позволяет вам создавать массив вложенных страниц прямо на уровне родительской страницы.
### 2. Динамическое создание страниц
#### Шаг 1: Создание страниц программно
Вы можете использовать функцию `wp_insert_post` для создания страниц программно. Пример ниже:
```php
function create_dynamic_page($title, $parent_id = 0) {
$post_id = wp_insert_post([
'post_title' => $title,
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $parent_id,
]);
if ($post_id) {
// Создание пользовательских полей с помощью ACF.
update_field('field_name', 'value', $post_id);
}
return $post_id;
}
```
#### Шаг 2: Редактирование и удаление
Вы можете использовать функции `wp_update_post` и `wp_delete_post` для редактирования и удаления записей:
```php
// Для редактирования
function update_dynamic_page($post_id, $new_title) {
wp_update_post([
'ID' => $post_id,
'post_title' => $new_title,
]);
}
// Для удаления
function delete_dynamic_page($post_id) {
wp_delete_post($post_id, true);
}
```
### 3. Генерация ЧПУ
Для генерации ЧПУ-урлов рекомендую следующее:
1. Убедитесь, что у вас включен постоянный линк в настройках (настройки → постоянные ссылки).
2. Вы можете использовать функцию `sanitize_title()` для создания ЧПУ на основе заголовка:
```php
$slug = sanitize_title($title);
```
Затем задайте его так:
```php
wp_insert_post([
'post_title' => $title,
'post_name' => $slug,
// другие параметры
]);
```
### 4. Вывод страниц и навигация
Для вывода страниц на основе вложенной структуры вы можете использовать рекурсивные функции:
```php
function display_child_pages($parent_id) {
$args = [
'post_type' => 'page',
'post_parent' => $parent_id,
'posts_per_page' => -1,
];
$children = new WP_Query($args);
if ($children->have_posts()) {
echo '<ul>';
while ($children->have_posts()) {
$children->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
display_child_pages(get_the_ID()); // рекурсивный вызов для вложенных страниц
}
echo '</ul>';
}
}
// Использование
display_child_pages(0); // Для вывода всех верхнего уровня страниц
```
### 5. Избегание загромождения админ-панели
Чтобы избежать загромождения, вы можете:
- Использовать таксономии для группировки страниц.
- Создавать кастомные типы записей для более четкой организации контента.
- Использовать фильтры и параметры отображения в админке для более удобного управления данными.
### Заключение
С помощью ACF вы сможете создать мощное решение для управления вложенными страницами в WordPress. Программное создание, редактирование и удаление страниц, вместе с генерацией ЧПУ и выводом страниц с помощью рекурсивных функций, дает вам гибкость в организации контента. Не забывайте, что, возможно, вам придется добавить дополнительные проверки и оптимизацию кода в реальных проектах.