Plugins bloques
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Name: Bloques en Transición
|
||||
* Plugin URI: https://tangente.coop/bloques
|
||||
* Description: Gestión de contenidos para el microsite "Bloques en Transición" - Actuaciones, Entidades, Recursos y Eventos con taxonomías personalizadas.
|
||||
* Version: 1.0.0
|
||||
* Author: Freepress Coop
|
||||
* Author URI: https://freepress.coop
|
||||
* License: GPL-2.0+
|
||||
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||
* Text Domain: bloques-transicion
|
||||
* Domain Path: /languages
|
||||
* Requires at least: 6.0
|
||||
* Requires PHP: 8.0
|
||||
*/
|
||||
|
||||
// Si se accede directamente, salir
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
// Constantes del plugin
|
||||
define('BLOQUES_VERSION', '1.0.0');
|
||||
define('BLOQUES_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||
define('BLOQUES_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||||
define('BLOQUES_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
||||
|
||||
/**
|
||||
* Clase principal del plugin
|
||||
*/
|
||||
final class Bloques_Transicion {
|
||||
|
||||
/**
|
||||
* Instancia única del plugin
|
||||
*/
|
||||
private static $instance = null;
|
||||
|
||||
/**
|
||||
* Obtener instancia única (Singleton)
|
||||
*/
|
||||
public static function get_instance() {
|
||||
if (null === self::$instance) {
|
||||
self::$instance = new self();
|
||||
}
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor privado
|
||||
*/
|
||||
private function __construct() {
|
||||
$this->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();
|
||||
|
||||
// Solo cargar en páginas del plugin
|
||||
if ($screen && (
|
||||
strpos($screen->id, 'bloques') !== false ||
|
||||
in_array($screen->post_type, ['actuacion', 'recurso_bloques', 'evento_bloques'])
|
||||
)) {
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
Reference in New Issue
Block a user