true, 'auto_faq_schema' => true, 'auto_summary' => true, 'llms_txt_enabled' => true, 'post_types' => array( 'post', 'page' ), 'exclude_categories' => array(), 'exclude_posts' => array(), ); $settings = get_option( 'aidentity_geo_settings', array() ); if ( ! is_array( $settings ) ) { $settings = array(); } return wp_parse_args( $settings, $defaults ); } /** * Main plugin class. * * @since 1.0.0 */ class Aidentity_GEO { /** * Single class instance. * * @var Aidentity_GEO|null */ private static $instance = null; /** * Returns the single class instance. * * @since 1.0.0 * @return Aidentity_GEO */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ private function __construct() { $this->load_dependencies(); $this->init_hooks(); } /** * Loads plugin dependencies. * * @since 1.0.0 */ private function load_dependencies() { require_once AIDENTITY_GEO_PATH . 'includes/class-aidentity-geo-llms-txt.php'; require_once AIDENTITY_GEO_PATH . 'includes/class-aidentity-geo-schema-faq.php'; require_once AIDENTITY_GEO_PATH . 'includes/class-aidentity-geo-ai-summary.php'; require_once AIDENTITY_GEO_PATH . 'includes/class-aidentity-geo-settings.php'; } /** * Initializes plugin hooks. * * @since 1.0.0 */ private function init_hooks() { register_activation_hook( __FILE__, array( $this, 'activate' ) ); register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) ); add_action( 'init', array( $this, 'init' ) ); add_action( 'admin_menu', array( $this, 'admin_menu' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) ); add_filter( 'plugin_action_links_' . AIDENTITY_GEO_BASENAME, array( $this, 'plugin_action_links' ) ); } /** * Plugin activation. * * @since 1.0.0 */ public function activate() { // Set default options. $defaults = array( 'enabled' => true, 'auto_faq_schema' => true, 'auto_summary' => true, 'llms_txt_enabled' => true, 'post_types' => array( 'post', 'page' ), 'exclude_categories' => array(), 'exclude_posts' => array(), ); if ( ! get_option( 'aidentity_geo_settings' ) ) { add_option( 'aidentity_geo_settings', $defaults ); } // Regenerate llms.txt. if ( class_exists( 'Aidentity_GEO_LLMS_TXT' ) ) { Aidentity_GEO_LLMS_TXT::get_instance()->generate_file(); } // Flush rewrite rules. flush_rewrite_rules(); } /** * Plugin deactivation. * * @since 1.0.0 */ public function deactivate() { // Clear transients. delete_transient( 'aidentity_geo_llms_txt' ); delete_transient( 'aidentity_geo_llms_full_txt' ); flush_rewrite_rules(); } /** * Plugin initialization. * * @since 1.0.0 */ public function init() { $settings = aidentity_geo_get_settings(); if ( ! empty( $settings['enabled'] ) ) { Aidentity_GEO_LLMS_TXT::get_instance(); Aidentity_GEO_Schema_FAQ::get_instance(); Aidentity_GEO_AI_Summary::get_instance(); } Aidentity_GEO_Settings::get_instance(); } /** * Adds the admin page. * * @since 1.0.0 */ public function admin_menu() { add_options_page( __( 'Aidentity Generative Engine Optimizer', 'aidentity-generative-engine-optimizer' ), __( 'Aidentity GEO', 'aidentity-generative-engine-optimizer' ), 'manage_options', 'aidentity-geo', array( Aidentity_GEO_Settings::get_instance(), 'render_page' ) ); } /** * Loads admin scripts and styles. * * @since 1.0.0 * @param string $hook Current page hook. */ public function admin_scripts( $hook ) { if ( 'settings_page_aidentity-geo' !== $hook ) { return; } wp_enqueue_style( 'aidentity-geo-admin', AIDENTITY_GEO_URL . 'assets/admin.css', array(), AIDENTITY_GEO_VERSION ); } /** * Adds links on the plugins page. * * @since 1.0.0 * @param array $links Existing links. * @return array Modified links. */ public function plugin_action_links( $links ) { $settings_link = sprintf( '%s', esc_url( admin_url( 'options-general.php?page=aidentity-geo' ) ), esc_html__( 'Settings', 'aidentity-generative-engine-optimizer' ) ); array_unshift( $links, $settings_link ); return $links; } } /** * Initializes the plugin. * * @since 1.0.0 * @return Aidentity_GEO */ function aidentity_geo_init() { return Aidentity_GEO::get_instance(); } add_action( 'plugins_loaded', 'aidentity_geo_init' );