add_category( 'crop-logic', [ 'title' => __( 'Crop Logic', 'crop-logic' ), 'icon' => 'fa fa-plug', ] ); } public function register_assets(): void { wp_register_style( 'crop-logic-ai-chat', CROP_LOGIC_PLUGIN_URL . 'assets/css/ai-chat.css', [], CROP_LOGIC_VERSION ); wp_register_script( 'crop-logic-ai-chat', CROP_LOGIC_PLUGIN_URL . 'assets/js/ai-chat.js', [], CROP_LOGIC_VERSION, true ); } public function register_widgets( $widgets_manager ): void { require_once CROP_LOGIC_PLUGIN_DIR . 'includes/class-ai-chat-widget.php'; $widgets_manager->register( new AI_Chat_Widget() ); } public function admin_notice_missing_elementor(): void { $this->render_notice( sprintf( /* translators: 1: plugin name, 2: dependency name */ esc_html__( '"%1$s" requires "%2$s" to be installed and activated.', 'crop-logic' ), '' . esc_html__( 'Crop Logic', 'crop-logic' ) . '', '' . esc_html__( 'Elementor', 'crop-logic' ) . '' ) ); } public function admin_notice_minimum_elementor_version(): void { $this->render_notice( sprintf( /* translators: 1: plugin name, 2: dependency name, 3: minimum version */ esc_html__( '"%1$s" requires "%2$s" version %3$s or greater.', 'crop-logic' ), '' . esc_html__( 'Crop Logic', 'crop-logic' ) . '', '' . esc_html__( 'Elementor', 'crop-logic' ) . '', self::MINIMUM_ELEMENTOR_VERSION ) ); } public function admin_notice_minimum_php_version(): void { $this->render_notice( sprintf( /* translators: 1: plugin name, 2: dependency name, 3: minimum version */ esc_html__( '"%1$s" requires "%2$s" version %3$s or greater.', 'crop-logic' ), '' . esc_html__( 'Crop Logic', 'crop-logic' ) . '', '' . esc_html__( 'PHP', 'crop-logic' ) . '', self::MINIMUM_PHP_VERSION ) ); } private function render_notice( string $message ): void { printf( '
%s