238 lines
6.6 KiB
PHP
238 lines
6.6 KiB
PHP
<?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();
|
|
|
|
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();
|