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 ''; - echo ''; - - foreach ($fields as $field_name => $field) { - echo ''; - echo ''; - echo ''; - echo ''; - - // Форматируем вывод значения - echo ''; - - echo ''; - } - - echo '
Название поляКлюч (Key)ТипЗначение
' . esc_html($field['label']) . '' . esc_html($field['name']) . '' . esc_html($field['type']) . ''; - 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 '
'; - } 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 ''; + echo ''; + echo ''; + echo ''; + echo ''; + + acf_viewer_display_fields($fields, 0); + + echo '
Название поляКлюч (Name)ТипНастройки
'; + } 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 '

Таксономии не найдены.

'; + return; + } + + foreach ($taxonomies as $taxonomy_slug => $taxonomy) { + // Пропускаем служебные таксономии + if (in_array($taxonomy_slug, array('nav_menu', 'link_category', 'post_format', 'wp_theme', 'wp_template_part_area'))) { + continue; + } + + 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 ''; + echo ''; + echo ''; + echo ''; + echo ''; + + acf_viewer_display_fields($fields, 0); + + echo '
Название поляКлюч (Name)ТипНастройки
'; + } else { + echo '

Поля не найдены в этой группе.

'; + } + + echo '
'; + } + } + + echo '
'; + } +} + +// Функция для отображения Options Pages +function acf_viewer_show_options_pages() { + // Проверяем, есть ли функция acf_get_options_pages + if (!function_exists('acf_get_options_pages')) { + echo '

ACF Options Pages не зарегистрированы или недоступны.

'; + return; + } + + $options_pages = acf_get_options_pages(); + + if (empty($options_pages)) { + echo '

ACF Options Pages не найдены.

'; + return; + } + + foreach ($options_pages as $options_page) { + 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 ''; + echo ''; + echo ''; + echo ''; + echo ''; + + acf_viewer_display_fields($fields, 0); + + echo '
Название поляКлюч (Name)ТипНастройки
'; + } + + echo '
'; + } + } + + echo '
'; + } +}