load_dependencies(); $this->init_hooks(); } /** * Cargar dependencias */ private function load_dependencies() { // Core require_once BLOQUES_PLUGIN_DIR . 'includes/class-post-types.php'; require_once BLOQUES_PLUGIN_DIR . 'includes/class-taxonomies.php'; require_once BLOQUES_PLUGIN_DIR . 'includes/class-acf-fields.php'; require_once BLOQUES_PLUGIN_DIR . 'includes/class-admin-menu.php'; require_once BLOQUES_PLUGIN_DIR . 'includes/class-shortcodes.php'; require_once BLOQUES_PLUGIN_DIR . 'includes/class-data-seeder.php'; } /** * Inicializar hooks */ private function init_hooks() { // Activación y desactivación register_activation_hook(__FILE__, [$this, 'activate']); register_deactivation_hook(__FILE__, [$this, 'deactivate']); // Inicialización add_action('init', [$this, 'init'], 0); add_action('plugins_loaded', [$this, 'load_textdomain']); // Admin if (is_admin()) { add_action('admin_enqueue_scripts', [$this, 'admin_assets']); } // Frontend add_action('wp_enqueue_scripts', [$this, 'frontend_assets']); } /** * Inicializar componentes */ public function init() { // Registrar CPTs y taxonomías Bloques_Post_Types::register(); Bloques_Taxonomies::register(); // Registrar campos ACF if (class_exists('ACF')) { Bloques_ACF_Fields::register(); } // Registrar menú admin Bloques_Admin_Menu::register(); // Registrar shortcodes Bloques_Shortcodes::register(); } /** * Cargar traducciones */ public function load_textdomain() { load_plugin_textdomain( 'bloques-transicion', false, dirname(BLOQUES_PLUGIN_BASENAME) . '/languages/' ); } /** * Assets del admin */ public function admin_assets($hook) { $screen = get_current_screen(); if (!$screen) { return; } // Cargar en páginas del plugin y también en editor de entradas (post) $is_bloques_page = strpos($screen->id, 'bloques') !== false || in_array($screen->post_type, ['actuacion', 'recurso_bloques', 'evento_bloques']); $is_post_editor = $screen->post_type === 'post' && in_array($hook, ['post.php', 'post-new.php']); if ($is_bloques_page || $is_post_editor) { wp_enqueue_style( 'bloques-admin', BLOQUES_PLUGIN_URL . 'assets/css/admin.css', [], BLOQUES_VERSION ); wp_enqueue_script( 'bloques-admin', BLOQUES_PLUGIN_URL . 'assets/js/admin.js', ['jquery'], BLOQUES_VERSION, true ); // Datos para el JS del admin if ($is_post_editor) { // Obtener los IDs de las categorías "bloques-en-transicion" y "bloques" $bloques_cat_ids = []; $bloques_cat = get_term_by('slug', 'bloques-en-transicion', 'category'); if ($bloques_cat) { $bloques_cat_ids[] = $bloques_cat->term_id; } $bloques_cat2 = get_term_by('slug', 'bloques', 'category'); if ($bloques_cat2) { $bloques_cat_ids[] = $bloques_cat2->term_id; } wp_localize_script('bloques-admin', 'bloquesAdminData', [ 'isPostEditor' => true, 'bloquesCatIds' => $bloques_cat_ids, ]); } } } /** * Assets del frontend */ public function frontend_assets() { wp_enqueue_style( 'bloques-frontend', BLOQUES_PLUGIN_URL . 'assets/css/frontend.css', [], BLOQUES_VERSION ); wp_enqueue_script( 'bloques-frontend', BLOQUES_PLUGIN_URL . 'assets/js/frontend.js', ['jquery'], BLOQUES_VERSION, true ); wp_localize_script('bloques-frontend', 'bloquesData', [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('bloques_nonce'), 'pluginUrl' => BLOQUES_PLUGIN_URL, ]); // Añadir CSS personalizado $custom_css = get_option('bloques_custom_css', ''); if (!empty($custom_css)) { wp_add_inline_style('bloques-frontend', $custom_css); } } /** * Activación del plugin */ public function activate() { // Registrar CPTs y taxonomías Bloques_Post_Types::register(); Bloques_Taxonomies::register(); // Flush rewrite rules flush_rewrite_rules(); // Marcar como activado update_option('bloques_transicion_activated', true); update_option('bloques_transicion_version', BLOQUES_VERSION); } /** * Desactivación del plugin */ public function deactivate() { flush_rewrite_rules(); } } /** * Iniciar el plugin */ function bloques_transicion() { return Bloques_Transicion::get_instance(); } // Arrancar bloques_transicion();