ruạṛ
<?php /** * @package ACF * @author WP Engine * * © 2026 Advanced Custom Fields (ACF®). All rights reserved. * "ACF" is a trademark of WP Engine. * Licensed under the GNU General Public License v2 or later. * https://www.gnu.org/licenses/gpl-2.0.html */ namespace ACF\AI; use ACF\AI\Abilities\Abilities; use ACF\AI\GEO\GEO; /** * Initializes the ACF AI functionality if enabled. */ class AI { /** * Constructs the AI class. * * @since 6.8.0 * * @return void */ public function __construct() { add_action( 'acf/init', array( $this, 'initialize' ) ); } /** * Initializes the AI functionality. * * @since 6.8.0 * * @return void */ public function initialize() { if ( $this->is_geo_enabled() ) { new GEO(); } if ( $this->is_ai_enabled() ) { new Abilities(); $this->add_admin_ui_hooks(); } } /** * Checks if AI functionality is enabled. * * @since 6.8.0 * * @return boolean */ public function is_ai_enabled(): bool { return (bool) acf_get_setting( 'enable_acf_ai' ); } /** * Checks if GEO functionality is enabled. * * @since 6.8.0 * * @return boolean */ public function is_geo_enabled(): bool { return (bool) acf_get_setting( 'enable_schema' ); } /** * Adds admin UI hooks. * * @since 6.8.0 * * @return void */ public function add_admin_ui_hooks() { // Add ACF AI tab to field groups. add_filter( 'acf/field_group/additional_group_settings_tabs', array( $this, 'add_acf_ai_tab' ) ); add_action( 'acf/field_group/render_group_settings_tab/acf-ai', array( $this, 'render_acf_ai_tab' ) ); // Add ACF AI tab to post types. add_filter( 'acf/post_type/additional_settings_tabs', array( $this, 'add_acf_ai_tab' ) ); add_action( 'acf/post_type/render_settings_tab/acf-ai', array( $this, 'render_acf_ai_tab' ) ); // Add ACF AI tab to taxonomies. add_filter( 'acf/taxonomy/additional_settings_tabs', array( $this, 'add_acf_ai_tab' ) ); add_action( 'acf/taxonomy/render_settings_tab/acf-ai', array( $this, 'render_acf_ai_tab' ) ); } /** * Registers the AI tab in various contexts. * * @since 6.8.0 * * @param array $tabs The existing tabs array. * @return array */ public function add_acf_ai_tab( array $tabs ): array { $tabs['acf-ai'] = __( 'ACF AI', 'acf' ); return $tabs; } /** * Renders the ACF AI tab in various contexts. * * @since 6.8.0 * * @param array $item The field group, post type, taxonomy, etc. being edited. * @return void */ public function render_acf_ai_tab( array $item ) { if ( empty( $item['key'] ) ) { return; } $item_type = acf_determine_internal_post_type( $item['key'] ); if ( ! $item_type ) { return; } $item_type = str_replace( '-', '_', $item_type ); $post_id = (int) acf_request_arg( 'post', 0 ); $allow_ai_access_val = ! empty( $item['allow_ai_access'] ) ? 1 : 0; // If this is a new item, default to allowing AI access. if ( ! $post_id ) { $allow_ai_access_val = 1; } $allow_access_label = __( 'Allow AI Access', 'acf' ); $allow_access_desc = __( 'Allow AI systems to access and modify this content through the WordPress Abilities API.', 'acf' ); $ai_description_label = __( 'AI Description', 'acf' ); $ai_description_desc = __( 'Provide a description that will help AI systems understand the purpose and how to use this effectively.', 'acf' ); if ( 'acf_post_type' === $item_type ) { $allow_access_label = __( 'Allow AI Access to Post Content', 'acf' ); $allow_access_desc = __( 'When enabled, AI models can access and interact with the content of posts in this post type using supported integrations. This feature uses the WordPress Abilities API.', 'acf' ); $ai_description_label = __( 'AI Guidance for Post Type', 'acf' ); $ai_description_desc = __( "Add a short explanation of what this post type is for. The clearer your description, the better the AI's output will be.", 'acf' ); } if ( 'acf_taxonomy' === $item_type ) { $allow_access_label = __( 'Allow AI Access to Taxonomy Terms', 'acf' ); $allow_access_desc = __( 'When enabled, AI models can access and interact with the terms in this taxonomy using supported integrations. This feature uses the WordPress Abilities API.', 'acf' ); $ai_description_label = __( 'AI Guidance for Taxonomy', 'acf' ); $ai_description_desc = __( "Add a short explanation of what this taxonomy is for. The clearer your description, the better the AI's output will be.", 'acf' ); } if ( 'acf_field_group' === $item_type ) { $allow_access_label = __( 'Allow AI Access to Field Data', 'acf' ); $allow_access_desc = __( 'When enabled, AI models can access and interact with the fields in this group using supported integrations. This feature uses the WordPress Abilities API.', 'acf' ); $ai_description_label = __( 'AI Context Description', 'acf' ); $ai_description_desc = __( "Add a short explanation of what this field group is for. The clearer your description, the better the AI's output will be.", 'acf' ); } acf_render_field_wrap( array( 'type' => 'true_false', 'name' => 'allow_ai_access', 'key' => 'allow_ai_access', 'prefix' => $item_type, 'value' => $allow_ai_access_val, 'label' => $allow_access_label, 'instructions' => $allow_access_desc, 'ui' => true, 'default' => 1, ) ); acf_render_field_wrap( array( 'type' => 'textarea', 'name' => 'ai_description', 'key' => 'ai_description', 'prefix' => $item_type, 'value' => $item['ai_description'] ?? '', 'label' => $ai_description_label, 'instructions' => $ai_description_desc, 'rows' => 4, 'conditions' => array( array( 'field' => 'allow_ai_access', 'operator' => '==', 'value' => '1', ), ), ), 'div', 'field' ); } }
cải xoăn