diff --git a/utils/acf-category.php b/utils/acf-category.php
index d2e8f7c..ddf5dfb 100644
--- a/utils/acf-category.php
+++ b/utils/acf-category.php
@@ -1,105 +1,503 @@
-
ACF поля всех категорий
+
ACF Fields Viewer
- 'category',
- 'hide_empty' => false,
- 'orderby' => 'name',
- 'order' => 'ASC'
- ));
+
+
- if (is_wp_error($categories)) {
- echo '
Ошибка при получении категорий: ' . $categories->get_error_message() . '
';
- return;
- }
-
- // Проверяем, есть ли категории
- if (empty($categories)) {
- echo '
Категории не найдены.
';
- return;
- }
-
- foreach ($categories as $category) {
- echo '
';
- echo '
' . esc_html($category->name) . ' (ID: ' . $category->term_id . ')
';
- echo '
Slug: ' . esc_html($category->slug) . '
';
- echo '
Описание: ' . esc_html($category->description) . '
';
-
- // Получаем все ACF поля для категории
- // Важно: указываем правильный параметр для таксономии
- $fields = get_field_objects('category_' . $category->term_id);
-
- if ($fields) {
- echo '
';
- echo '| Название поля | Ключ (Key) | Тип | Значение |
';
- echo '';
-
- foreach ($fields as $field_name => $field) {
- echo '';
- echo '| ' . esc_html($field['label']) . ' | ';
- echo '' . esc_html($field['name']) . ' | ';
- echo '' . esc_html($field['type']) . ' | ';
-
- // Форматируем вывод значения
- echo '';
- if ($field['value'] === null || $field['value'] === false || $field['value'] === '') {
- echo '(пусто)';
- } elseif (is_array($field['value'])) {
- echo '' . esc_html(print_r($field['value'], true)) . ' ';
- } elseif (is_object($field['value'])) {
- echo '' . esc_html(print_r($field['value'], true)) . ' ';
- } else {
- echo esc_html($field['value']);
- }
- echo ' | ';
-
- echo '
';
- }
-
- echo '
';
- } else {
- echo '
ACF поля не найдены для этой категории.
';
+
+ ';
- }
- ?>
+ ?>
+
Типы постов не найдены.
';
+ return;
+ }
+
+ foreach ($all_post_types as $post_type_slug => $post_type) {
+ // Пропускаем служебные типы
+ if (in_array($post_type_slug, array('revision', 'nav_menu_item', 'custom_css', 'customize_changeset', 'oembed_cache', 'user_request', 'wp_block', 'wp_template', 'wp_template_part', 'wp_global_styles', 'wp_navigation', 'acf-field-group', 'acf-field'))) {
+ continue;
+ }
+
+ echo '';
+ echo '
' . esc_html($post_type->labels->name) . ' (' . esc_html($post_type_slug) . ')
';
+
+ // Информация о типе поста
+ echo '
';
+ echo '
Slug: ' . esc_html($post_type_slug) . '
';
+ echo '
Публичный: ' . ($post_type->public ? 'Да' : 'Нет') . '
';
+ echo '
Иерархический: ' . ($post_type->hierarchical ? 'Да' : 'Нет') . '
';
+
+ // Подсчет постов
+ $count = wp_count_posts($post_type_slug);
+ $total = 0;
+ foreach ($count as $status => $number) {
+ $total += $number;
+ }
+ echo '
Всего постов: ' . $total . '
';
+ echo '
';
+
+ // Получаем группы полей для этого типа постов
+ $field_groups = acf_get_field_groups(array(
+ 'post_type' => $post_type_slug
+ ));
+
+ if (empty($field_groups)) {
+ echo '
ACF группы полей не найдены для этого типа постов.
';
+ } else {
+ echo '
Найдено групп полей: ' . count($field_groups) . '
';
+
+ foreach ($field_groups as $field_group) {
+ echo '
';
+ echo '
' . esc_html($field_group['title']) . '
';
+
+ // Информация о группе
+ echo '
';
+ echo '
Key: ' . esc_html($field_group['key']) . '
';
+
+ // Показываем правила размещения
+ if (!empty($field_group['location'])) {
+ echo '
';
+ echo 'Правила размещения:
';
+ foreach ($field_group['location'] as $group_index => $rules) {
+ if ($group_index > 0) echo 'или
';
+ foreach ($rules as $rule_index => $rule) {
+ if ($rule_index > 0) echo 'и ';
+ $operator_text = ($rule['operator'] == '==') ? 'равно' : 'не равно';
+ echo esc_html($rule['param']) . ' ' . $operator_text . ' ' . esc_html($rule['value']) . '
';
+ }
+ }
+ echo '
';
+ }
+
+ if (!empty($field_group['description'])) {
+ echo '
Описание: ' . esc_html($field_group['description']) . '
';
+ }
+ echo '
';
+
+ // Получаем поля группы
+ $fields = acf_get_fields($field_group['key']);
+
+ if ($fields) {
+ echo '
';
+ echo '';
+ echo '| Название поля | ';
+ echo 'Ключ (Name) | ';
+ echo 'Тип | ';
+ echo 'Настройки | ';
+ echo '
';
+ echo '';
+
+ acf_viewer_display_fields($fields, 0);
+
+ echo '
';
+ } else {
+ echo '
Поля не найдены в этой группе.
';
+ }
+
+ echo '
';
+ }
+ }
+
+ echo '
';
+ }
+}
+
+// Рекурсивная функция для отображения полей (включая вложенные)
+function acf_viewer_display_fields($fields, $level = 0) {
+ foreach ($fields as $field) {
+ $indent = str_repeat('—', $level);
+
+ echo '';
+ echo '| ';
+ echo $indent . ' ' . esc_html($field['label']) . '';
+ if (!empty($field['required'])) {
+ echo 'обязательное';
+ }
+ echo ' | ';
+ echo '' . esc_html($field['name']) . ' | ';
+ echo '' . esc_html($field['type']) . ' | ';
+ echo '';
+
+ // Показываем ключевые настройки в зависимости от типа
+ $settings = array();
+
+ if (!empty($field['instructions'])) {
+ $settings[] = 'Инструкции: ' . esc_html($field['instructions']);
+ }
+
+ if (!empty($field['default_value'])) {
+ $settings[] = 'По умолчанию: ' . esc_html($field['default_value']);
+ }
+
+ // Специфичные настройки для разных типов
+ switch ($field['type']) {
+ case 'text':
+ case 'textarea':
+ if (!empty($field['placeholder'])) {
+ $settings[] = 'Placeholder: ' . esc_html($field['placeholder']);
+ }
+ if (!empty($field['maxlength'])) {
+ $settings[] = 'Макс. длина: ' . esc_html($field['maxlength']);
+ }
+ break;
+
+ case 'select':
+ case 'checkbox':
+ case 'radio':
+ if (!empty($field['choices'])) {
+ $choices = is_array($field['choices']) ? implode(', ', array_keys($field['choices'])) : $field['choices'];
+ $settings[] = 'Варианты: ' . esc_html($choices);
+ }
+ break;
+
+ case 'image':
+ case 'file':
+ if (!empty($field['return_format'])) {
+ $settings[] = 'Формат возврата: ' . esc_html($field['return_format']);
+ }
+ if (!empty($field['mime_types'])) {
+ $settings[] = 'Типы файлов: ' . esc_html($field['mime_types']);
+ }
+ break;
+
+ case 'post_object':
+ case 'relationship':
+ if (!empty($field['post_type'])) {
+ $pt = is_array($field['post_type']) ? implode(', ', $field['post_type']) : $field['post_type'];
+ $settings[] = 'Типы постов: ' . esc_html($pt);
+ }
+ break;
+
+ case 'taxonomy':
+ if (!empty($field['taxonomy'])) {
+ $settings[] = 'Таксономия: ' . esc_html($field['taxonomy']);
+ }
+ break;
+ }
+
+ if (!empty($settings)) {
+ echo implode(' ', $settings);
+ } else {
+ echo '—';
+ }
+
+ echo ' | ';
+ echo '
';
+
+ // Рекурсивно обрабатываем вложенные поля (для repeater, group, flexible content)
+ if (in_array($field['type'], array('repeater', 'group', 'flexible_content')) && !empty($field['sub_fields'])) {
+ acf_viewer_display_fields($field['sub_fields'], $level + 1);
+ }
+ }
+}
+
+// Функция для отображения таксономий
+function acf_viewer_show_taxonomies() {
+ // Получаем все таксономии
+ $taxonomies = get_taxonomies(array(), 'objects');
+
+ if (empty($taxonomies)) {
+ echo '';
+ echo '
' . esc_html($taxonomy->labels->name) . ' (' . esc_html($taxonomy_slug) . ')
';
+
+ // Информация о таксономии
+ echo '
';
+ echo '
Slug: ' . esc_html($taxonomy_slug) . '
';
+ echo '
Публичная: ' . ($taxonomy->public ? 'Да' : 'Нет') . '
';
+ echo '
Иерархическая: ' . ($taxonomy->hierarchical ? 'Да' : 'Нет') . '
';
+ echo '
Типы постов: ' . implode(', ', $taxonomy->object_type) . '
';
+
+ // Подсчет терминов
+ $terms_count = wp_count_terms(array('taxonomy' => $taxonomy_slug, 'hide_empty' => false));
+ echo '
Всего терминов: ' . (is_wp_error($terms_count) ? 0 : $terms_count) . '
';
+ echo '
';
+
+ // Получаем группы полей для этой таксономии
+ $field_groups = acf_get_field_groups(array(
+ 'taxonomy' => $taxonomy_slug
+ ));
+
+ if (empty($field_groups)) {
+ echo '
ACF группы полей не найдены для этой таксономии.
';
+ } else {
+ echo '
Найдено групп полей: ' . count($field_groups) . '
';
+
+ foreach ($field_groups as $field_group) {
+ echo '
';
+ echo '
' . esc_html($field_group['title']) . '
';
+
+ echo '
';
+ echo '
Key: ' . esc_html($field_group['key']) . '
';
+ if (!empty($field_group['description'])) {
+ echo '
Описание: ' . esc_html($field_group['description']) . '
';
+ }
+ echo '
';
+
+ // Получаем поля группы
+ $fields = acf_get_fields($field_group['key']);
+
+ if ($fields) {
+ echo '
';
+ echo '';
+ echo '| Название поля | ';
+ echo 'Ключ (Name) | ';
+ echo 'Тип | ';
+ echo 'Настройки | ';
+ echo '
';
+ echo '';
+
+ acf_viewer_display_fields($fields, 0);
+
+ echo '
';
+ } else {
+ echo '
Поля не найдены в этой группе.
';
+ }
+
+ echo '
';
+ }
+ }
+
+ echo '
';
+ }
+}
+
+// Функция для отображения Options Pages
+function acf_viewer_show_options_pages() {
+ // Проверяем, есть ли функция acf_get_options_pages
+ if (!function_exists('acf_get_options_pages')) {
+ echo '';
+ echo '
' . esc_html($options_page['page_title']) . '
';
+
+ echo '
';
+ echo '
Menu Slug: ' . esc_html($options_page['menu_slug']) . '
';
+ echo '
Post ID: ' . esc_html($options_page['post_id']) . '
';
+ echo '
';
+
+ // Получаем группы полей для этой options page
+ $field_groups = acf_get_field_groups(array(
+ 'options_page' => $options_page['menu_slug']
+ ));
+
+ if (empty($field_groups)) {
+ echo '
ACF группы полей не найдены для этой страницы опций.
';
+ } else {
+ echo '
Найдено групп полей: ' . count($field_groups) . '
';
+
+ foreach ($field_groups as $field_group) {
+ echo '
';
+ echo '
' . esc_html($field_group['title']) . '
';
+
+ $fields = acf_get_fields($field_group['key']);
+
+ if ($fields) {
+ echo '
';
+ echo '';
+ echo '| Название поля | ';
+ echo 'Ключ (Name) | ';
+ echo 'Тип | ';
+ echo 'Настройки | ';
+ echo '
';
+ echo '';
+
+ acf_viewer_display_fields($fields, 0);
+
+ echo '
';
+ }
+
+ echo '
';
+ }
+ }
+
+ echo '
';
+ }
+}