Plugins bloques
This commit is contained in:
@@ -0,0 +1,453 @@
|
||||
<?php
|
||||
/**
|
||||
* Registro de campos ACF
|
||||
*
|
||||
* @package Bloques_Transicion
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class Bloques_ACF_Fields {
|
||||
|
||||
/**
|
||||
* Registrar todos los grupos de campos
|
||||
*/
|
||||
public static function register() {
|
||||
add_action('acf/init', [__CLASS__, 'register_field_groups']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registrar grupos de campos ACF
|
||||
*/
|
||||
public static function register_field_groups() {
|
||||
if (!function_exists('acf_add_local_field_group')) {
|
||||
return;
|
||||
}
|
||||
|
||||
self::register_actuacion_fields();
|
||||
self::register_recurso_fields();
|
||||
self::register_evento_fields();
|
||||
self::register_iniciativa_fields();
|
||||
self::register_linea_trabajo_fields();
|
||||
}
|
||||
|
||||
/**
|
||||
* Campos para Actuaciones
|
||||
*/
|
||||
private static function register_actuacion_fields() {
|
||||
acf_add_local_field_group([
|
||||
'key' => 'group_bloques_actuacion',
|
||||
'title' => __('Datos de la Actuación', 'bloques-transicion'),
|
||||
'fields' => [
|
||||
// Es piloto
|
||||
[
|
||||
'key' => 'field_actuacion_es_piloto',
|
||||
'label' => __('Es actuación piloto', 'bloques-transicion'),
|
||||
'name' => 'es_piloto',
|
||||
'type' => 'true_false',
|
||||
'instructions' => __('Marcar si esta actuación es un proyecto piloto', 'bloques-transicion'),
|
||||
'ui' => 1,
|
||||
'ui_on_text' => __('Sí', 'bloques-transicion'),
|
||||
'ui_off_text' => __('No', 'bloques-transicion'),
|
||||
'default_value' => 0,
|
||||
],
|
||||
// Tab Ubicación
|
||||
[
|
||||
'key' => 'field_actuacion_tab_ubicacion',
|
||||
'label' => __('Ubicación', 'bloques-transicion'),
|
||||
'name' => '',
|
||||
'type' => 'tab',
|
||||
'placement' => 'top',
|
||||
],
|
||||
// Dirección
|
||||
[
|
||||
'key' => 'field_actuacion_direccion',
|
||||
'label' => __('Dirección', 'bloques-transicion'),
|
||||
'name' => 'direccion',
|
||||
'type' => 'text',
|
||||
'instructions' => __('Dirección completa', 'bloques-transicion'),
|
||||
],
|
||||
// Localidad
|
||||
[
|
||||
'key' => 'field_actuacion_localidad',
|
||||
'label' => __('Localidad', 'bloques-transicion'),
|
||||
'name' => 'localidad',
|
||||
'type' => 'text',
|
||||
'instructions' => __('Ciudad o barrio', 'bloques-transicion'),
|
||||
],
|
||||
// Latitud
|
||||
[
|
||||
'key' => 'field_actuacion_latitud',
|
||||
'label' => __('Latitud', 'bloques-transicion'),
|
||||
'name' => 'latitud',
|
||||
'type' => 'number',
|
||||
'instructions' => __('Coordenada de latitud (ej: 40.4168)', 'bloques-transicion'),
|
||||
'step' => 'any',
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Longitud
|
||||
[
|
||||
'key' => 'field_actuacion_longitud',
|
||||
'label' => __('Longitud', 'bloques-transicion'),
|
||||
'name' => 'longitud',
|
||||
'type' => 'number',
|
||||
'instructions' => __('Coordenada de longitud (ej: -3.7038)', 'bloques-transicion'),
|
||||
'step' => 'any',
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Mapa (Google Maps si está disponible, sino texto)
|
||||
[
|
||||
'key' => 'field_actuacion_mapa',
|
||||
'label' => __('Seleccionar en mapa', 'bloques-transicion'),
|
||||
'name' => 'mapa',
|
||||
'type' => 'google_map',
|
||||
'instructions' => __('Haz clic en el mapa para obtener las coordenadas automáticamente', 'bloques-transicion'),
|
||||
'center_lat' => '40.4168',
|
||||
'center_lng' => '-3.7038',
|
||||
'zoom' => 12,
|
||||
'conditional_logic' => [
|
||||
[
|
||||
[
|
||||
'field' => 'field_actuacion_latitud',
|
||||
'operator' => '==empty',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
'location' => [
|
||||
[
|
||||
[
|
||||
'param' => 'post_type',
|
||||
'operator' => '==',
|
||||
'value' => 'actuacion',
|
||||
],
|
||||
],
|
||||
],
|
||||
'menu_order' => 0,
|
||||
'position' => 'normal',
|
||||
'style' => 'default',
|
||||
'label_placement' => 'top',
|
||||
'instruction_placement' => 'label',
|
||||
'active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Campos para Recursos
|
||||
*/
|
||||
private static function register_recurso_fields() {
|
||||
acf_add_local_field_group([
|
||||
'key' => 'group_bloques_recurso',
|
||||
'title' => __('Datos del Recurso', 'bloques-transicion'),
|
||||
'fields' => [
|
||||
// Archivo
|
||||
[
|
||||
'key' => 'field_recurso_archivo',
|
||||
'label' => __('Archivo', 'bloques-transicion'),
|
||||
'name' => 'archivo',
|
||||
'type' => 'file',
|
||||
'instructions' => __('Sube el archivo del recurso (PDF, DOC, JPG, PNG, etc.)', 'bloques-transicion'),
|
||||
'required' => 0,
|
||||
'return_format' => 'array',
|
||||
'library' => 'all',
|
||||
'mime_types' => 'pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif,zip',
|
||||
],
|
||||
// Tipo de recurso (informativo)
|
||||
[
|
||||
'key' => 'field_recurso_tipo',
|
||||
'label' => __('Tipo de Recurso', 'bloques-transicion'),
|
||||
'name' => 'tipo_recurso',
|
||||
'type' => 'select',
|
||||
'instructions' => __('Categoría del tipo de recurso', 'bloques-transicion'),
|
||||
'choices' => [
|
||||
'documento' => __('Documento', 'bloques-transicion'),
|
||||
'guia' => __('Guía', 'bloques-transicion'),
|
||||
'informe' => __('Informe', 'bloques-transicion'),
|
||||
'presentacion' => __('Presentación', 'bloques-transicion'),
|
||||
'video' => __('Vídeo', 'bloques-transicion'),
|
||||
'imagen' => __('Imagen', 'bloques-transicion'),
|
||||
'otro' => __('Otro', 'bloques-transicion'),
|
||||
],
|
||||
'default_value' => 'documento',
|
||||
'allow_null' => 0,
|
||||
'return_format' => 'value',
|
||||
],
|
||||
// URL externa (alternativa al archivo)
|
||||
[
|
||||
'key' => 'field_recurso_url_externa',
|
||||
'label' => __('URL Externa', 'bloques-transicion'),
|
||||
'name' => 'url_externa',
|
||||
'type' => 'url',
|
||||
'instructions' => __('Si el recurso está alojado externamente (YouTube, Drive, etc.)', 'bloques-transicion'),
|
||||
],
|
||||
],
|
||||
'location' => [
|
||||
[
|
||||
[
|
||||
'param' => 'post_type',
|
||||
'operator' => '==',
|
||||
'value' => 'recurso_bloques',
|
||||
],
|
||||
],
|
||||
],
|
||||
'menu_order' => 0,
|
||||
'position' => 'normal',
|
||||
'style' => 'default',
|
||||
'label_placement' => 'top',
|
||||
'instruction_placement' => 'label',
|
||||
'active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Campos para Eventos
|
||||
*/
|
||||
private static function register_evento_fields() {
|
||||
acf_add_local_field_group([
|
||||
'key' => 'group_bloques_evento',
|
||||
'title' => __('Datos del Evento', 'bloques-transicion'),
|
||||
'fields' => [
|
||||
// Tab Fecha y Hora
|
||||
[
|
||||
'key' => 'field_evento_tab_fecha',
|
||||
'label' => __('Fecha y Hora', 'bloques-transicion'),
|
||||
'name' => '',
|
||||
'type' => 'tab',
|
||||
'placement' => 'top',
|
||||
],
|
||||
// Fecha inicio
|
||||
[
|
||||
'key' => 'field_evento_fecha_inicio',
|
||||
'label' => __('Fecha de inicio', 'bloques-transicion'),
|
||||
'name' => 'fecha_inicio',
|
||||
'type' => 'date_picker',
|
||||
'instructions' => __('Fecha en que comienza el evento', 'bloques-transicion'),
|
||||
'required' => 1,
|
||||
'display_format' => 'd/m/Y',
|
||||
'return_format' => 'Y-m-d',
|
||||
'first_day' => 1,
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Hora inicio
|
||||
[
|
||||
'key' => 'field_evento_hora_inicio',
|
||||
'label' => __('Hora de inicio', 'bloques-transicion'),
|
||||
'name' => 'hora_inicio',
|
||||
'type' => 'time_picker',
|
||||
'instructions' => __('Hora de inicio del evento', 'bloques-transicion'),
|
||||
'display_format' => 'H:i',
|
||||
'return_format' => 'H:i',
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Fecha fin
|
||||
[
|
||||
'key' => 'field_evento_fecha_fin',
|
||||
'label' => __('Fecha de fin', 'bloques-transicion'),
|
||||
'name' => 'fecha_fin',
|
||||
'type' => 'date_picker',
|
||||
'instructions' => __('Fecha en que termina el evento (opcional)', 'bloques-transicion'),
|
||||
'display_format' => 'd/m/Y',
|
||||
'return_format' => 'Y-m-d',
|
||||
'first_day' => 1,
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Hora fin
|
||||
[
|
||||
'key' => 'field_evento_hora_fin',
|
||||
'label' => __('Hora de fin', 'bloques-transicion'),
|
||||
'name' => 'hora_fin',
|
||||
'type' => 'time_picker',
|
||||
'instructions' => __('Hora de finalización (opcional)', 'bloques-transicion'),
|
||||
'display_format' => 'H:i',
|
||||
'return_format' => 'H:i',
|
||||
'wrapper' => ['width' => '50'],
|
||||
],
|
||||
// Tab Ubicación
|
||||
[
|
||||
'key' => 'field_evento_tab_ubicacion',
|
||||
'label' => __('Ubicación', 'bloques-transicion'),
|
||||
'name' => '',
|
||||
'type' => 'tab',
|
||||
'placement' => 'top',
|
||||
],
|
||||
// Lugar
|
||||
[
|
||||
'key' => 'field_evento_lugar',
|
||||
'label' => __('Lugar', 'bloques-transicion'),
|
||||
'name' => 'lugar',
|
||||
'type' => 'text',
|
||||
'instructions' => __('Nombre del lugar donde se celebra', 'bloques-transicion'),
|
||||
],
|
||||
// Dirección
|
||||
[
|
||||
'key' => 'field_evento_direccion',
|
||||
'label' => __('Dirección', 'bloques-transicion'),
|
||||
'name' => 'direccion',
|
||||
'type' => 'text',
|
||||
],
|
||||
// URL Online
|
||||
[
|
||||
'key' => 'field_evento_url_online',
|
||||
'label' => __('Enlace para evento online', 'bloques-transicion'),
|
||||
'name' => 'url_online',
|
||||
'type' => 'url',
|
||||
'instructions' => __('URL de Zoom, Meet, YouTube, etc. para eventos online', 'bloques-transicion'),
|
||||
],
|
||||
// Tab Inscripción
|
||||
[
|
||||
'key' => 'field_evento_tab_inscripcion',
|
||||
'label' => __('Inscripción', 'bloques-transicion'),
|
||||
'name' => '',
|
||||
'type' => 'tab',
|
||||
'placement' => 'top',
|
||||
],
|
||||
// URL inscripción
|
||||
[
|
||||
'key' => 'field_evento_url_inscripcion',
|
||||
'label' => __('URL de inscripción', 'bloques-transicion'),
|
||||
'name' => 'url_inscripcion',
|
||||
'type' => 'url',
|
||||
'instructions' => __('Enlace al formulario de inscripción', 'bloques-transicion'),
|
||||
],
|
||||
// Plazas
|
||||
[
|
||||
'key' => 'field_evento_plazas',
|
||||
'label' => __('Número de plazas', 'bloques-transicion'),
|
||||
'name' => 'plazas',
|
||||
'type' => 'number',
|
||||
'instructions' => __('Aforo máximo (dejar vacío si no hay límite)', 'bloques-transicion'),
|
||||
'min' => 0,
|
||||
],
|
||||
],
|
||||
'location' => [
|
||||
[
|
||||
[
|
||||
'param' => 'post_type',
|
||||
'operator' => '==',
|
||||
'value' => 'evento_bloques',
|
||||
],
|
||||
],
|
||||
],
|
||||
'menu_order' => 0,
|
||||
'position' => 'normal',
|
||||
'style' => 'default',
|
||||
'label_placement' => 'top',
|
||||
'instruction_placement' => 'label',
|
||||
'active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Campos para taxonomía Iniciativas
|
||||
*/
|
||||
private static function register_iniciativa_fields() {
|
||||
acf_add_local_field_group([
|
||||
'key' => 'group_bloques_iniciativa_tax',
|
||||
'title' => __('Datos de la Iniciativa', 'bloques-transicion'),
|
||||
'fields' => [
|
||||
// Icono
|
||||
[
|
||||
'key' => 'field_iniciativa_icono',
|
||||
'label' => __('Icono', 'bloques-transicion'),
|
||||
'name' => 'icono',
|
||||
'type' => 'image',
|
||||
'instructions' => __('Icono representativo de la iniciativa (SVG o PNG recomendado)', 'bloques-transicion'),
|
||||
'return_format' => 'url',
|
||||
'preview_size' => 'thumbnail',
|
||||
'library' => 'all',
|
||||
'mime_types' => 'svg,png,jpg,jpeg',
|
||||
],
|
||||
// Color
|
||||
[
|
||||
'key' => 'field_iniciativa_color',
|
||||
'label' => __('Color', 'bloques-transicion'),
|
||||
'name' => 'color',
|
||||
'type' => 'color_picker',
|
||||
'instructions' => __('Color identificativo de la iniciativa', 'bloques-transicion'),
|
||||
'default_value' => '#1E6B52',
|
||||
],
|
||||
// Ubicación
|
||||
[
|
||||
'key' => 'field_iniciativa_ubicacion',
|
||||
'label' => __('Ubicación', 'bloques-transicion'),
|
||||
'name' => 'ubicacion_texto',
|
||||
'type' => 'text',
|
||||
'instructions' => __('Texto descriptivo de la ubicación (ej: "Puente y Villa de Vallecas")', 'bloques-transicion'),
|
||||
],
|
||||
// Estado
|
||||
[
|
||||
'key' => 'field_iniciativa_estado',
|
||||
'label' => __('Estado', 'bloques-transicion'),
|
||||
'name' => 'estado',
|
||||
'type' => 'text',
|
||||
'instructions' => __('Estado actual de la iniciativa (ej: "En proceso", "Abierta")', 'bloques-transicion'),
|
||||
],
|
||||
],
|
||||
'location' => [
|
||||
[
|
||||
[
|
||||
'param' => 'taxonomy',
|
||||
'operator' => '==',
|
||||
'value' => 'iniciativa',
|
||||
],
|
||||
],
|
||||
],
|
||||
'menu_order' => 0,
|
||||
'position' => 'normal',
|
||||
'style' => 'default',
|
||||
'label_placement' => 'top',
|
||||
'instruction_placement' => 'label',
|
||||
'active' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Campos para taxonomía Líneas de Trabajo
|
||||
*/
|
||||
private static function register_linea_trabajo_fields() {
|
||||
acf_add_local_field_group([
|
||||
'key' => 'group_bloques_linea_trabajo_tax',
|
||||
'title' => __('Datos de la Línea de Trabajo', 'bloques-transicion'),
|
||||
'fields' => [
|
||||
// Icono
|
||||
[
|
||||
'key' => 'field_linea_trabajo_icono',
|
||||
'label' => __('Icono', 'bloques-transicion'),
|
||||
'name' => 'icono',
|
||||
'type' => 'image',
|
||||
'instructions' => __('Icono representativo de la línea de trabajo', 'bloques-transicion'),
|
||||
'return_format' => 'url',
|
||||
'preview_size' => 'thumbnail',
|
||||
'library' => 'all',
|
||||
'mime_types' => 'svg,png,jpg,jpeg',
|
||||
],
|
||||
// Color (opcional para líneas de trabajo)
|
||||
[
|
||||
'key' => 'field_linea_trabajo_color',
|
||||
'label' => __('Color', 'bloques-transicion'),
|
||||
'name' => 'color',
|
||||
'type' => 'color_picker',
|
||||
'instructions' => __('Color identificativo (opcional)', 'bloques-transicion'),
|
||||
],
|
||||
],
|
||||
'location' => [
|
||||
[
|
||||
[
|
||||
'param' => 'taxonomy',
|
||||
'operator' => '==',
|
||||
'value' => 'linea_trabajo',
|
||||
],
|
||||
],
|
||||
],
|
||||
'menu_order' => 0,
|
||||
'position' => 'normal',
|
||||
'style' => 'default',
|
||||
'label_placement' => 'top',
|
||||
'instruction_placement' => 'label',
|
||||
'active' => true,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
<?php
|
||||
/**
|
||||
* Menú de administración personalizado
|
||||
*
|
||||
* @package Bloques_Transicion
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class Bloques_Admin_Menu {
|
||||
|
||||
/**
|
||||
* Registrar menú
|
||||
*/
|
||||
public static function register() {
|
||||
add_action('admin_menu', [__CLASS__, 'add_admin_menu']);
|
||||
add_action('parent_file', [__CLASS__, 'fix_parent_menu']);
|
||||
add_action('submenu_file', [__CLASS__, 'fix_submenu']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Añadir menú principal y submenús
|
||||
*/
|
||||
public static function add_admin_menu() {
|
||||
// Menú principal: Bloques
|
||||
add_menu_page(
|
||||
__('Bloques en Transición', 'bloques-transicion'),
|
||||
__('Bloques', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'bloques-dashboard',
|
||||
[__CLASS__, 'render_dashboard'],
|
||||
'dashicons-building',
|
||||
25
|
||||
);
|
||||
|
||||
// Dashboard
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Panel de Bloques', 'bloques-transicion'),
|
||||
__('Panel', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'bloques-dashboard',
|
||||
[__CLASS__, 'render_dashboard']
|
||||
);
|
||||
|
||||
// === ACTUACIONES ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Actuaciones', 'bloques-transicion'),
|
||||
__('Actuaciones', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'edit.php?post_type=actuacion'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Añadir Actuación', 'bloques-transicion'),
|
||||
__('↳ Añadir nueva', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'post-new.php?post_type=actuacion'
|
||||
);
|
||||
|
||||
// === RECURSOS ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Recursos', 'bloques-transicion'),
|
||||
__('Recursos', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'edit.php?post_type=recurso_bloques'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Añadir Recurso', 'bloques-transicion'),
|
||||
__('↳ Añadir nuevo', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'post-new.php?post_type=recurso_bloques'
|
||||
);
|
||||
|
||||
// === EVENTOS ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Eventos', 'bloques-transicion'),
|
||||
__('Eventos', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'edit.php?post_type=evento_bloques'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Añadir Evento', 'bloques-transicion'),
|
||||
__('↳ Añadir nuevo', 'bloques-transicion'),
|
||||
'edit_posts',
|
||||
'post-new.php?post_type=evento_bloques'
|
||||
);
|
||||
|
||||
// === SEPARADOR ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
'',
|
||||
'<span style="display:block;border-top:1px solid #555;margin:10px 0;"></span>',
|
||||
'edit_posts',
|
||||
'#separator1'
|
||||
);
|
||||
|
||||
// === TAXONOMÍAS ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Iniciativas', 'bloques-transicion'),
|
||||
__('Iniciativas', 'bloques-transicion'),
|
||||
'manage_categories',
|
||||
'edit-tags.php?taxonomy=iniciativa'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Líneas de Trabajo', 'bloques-transicion'),
|
||||
__('Líneas de Trabajo', 'bloques-transicion'),
|
||||
'manage_categories',
|
||||
'edit-tags.php?taxonomy=linea_trabajo'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Tipos de Evento', 'bloques-transicion'),
|
||||
__('Tipos de Evento', 'bloques-transicion'),
|
||||
'manage_categories',
|
||||
'edit-tags.php?taxonomy=tipo_evento'
|
||||
);
|
||||
|
||||
// === SEPARADOR ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
'',
|
||||
'<span style="display:block;border-top:1px solid #555;margin:10px 0;"></span>',
|
||||
'manage_options',
|
||||
'#separator2'
|
||||
);
|
||||
|
||||
// === HERRAMIENTAS ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Cargar datos iniciales', 'bloques-transicion'),
|
||||
__('⚙️ Cargar datos', 'bloques-transicion'),
|
||||
'manage_options',
|
||||
'bloques-seeder',
|
||||
[__CLASS__, 'render_seeder_page']
|
||||
);
|
||||
|
||||
// === AJUSTES ===
|
||||
add_submenu_page(
|
||||
'bloques-dashboard',
|
||||
__('Ajustes', 'bloques-transicion'),
|
||||
__('⚙️ Ajustes', 'bloques-transicion'),
|
||||
'manage_options',
|
||||
'bloques-settings',
|
||||
[__CLASS__, 'render_settings_page']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renderizar página de ajustes
|
||||
*/
|
||||
public static function render_settings_page() {
|
||||
// Guardar opciones si se envió el formulario
|
||||
if (isset($_POST['bloques_settings_nonce']) && wp_verify_nonce($_POST['bloques_settings_nonce'], 'bloques_save_settings')) {
|
||||
$custom_css = isset($_POST['bloques_custom_css']) ? wp_strip_all_tags($_POST['bloques_custom_css']) : '';
|
||||
update_option('bloques_custom_css', $custom_css);
|
||||
$saved = true;
|
||||
}
|
||||
|
||||
$custom_css = get_option('bloques_custom_css', '');
|
||||
include BLOQUES_PLUGIN_DIR . 'templates/admin/settings.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Corregir menú padre activo
|
||||
*/
|
||||
public static function fix_parent_menu($parent_file) {
|
||||
global $current_screen;
|
||||
|
||||
if (!$current_screen) {
|
||||
return $parent_file;
|
||||
}
|
||||
|
||||
$post_types = Bloques_Post_Types::get_post_types();
|
||||
$taxonomies = Bloques_Taxonomies::get_taxonomies();
|
||||
|
||||
// Si estamos en un CPT de Bloques
|
||||
if (in_array($current_screen->post_type, $post_types)) {
|
||||
return 'bloques-dashboard';
|
||||
}
|
||||
|
||||
// Si estamos en una taxonomía de Bloques
|
||||
if (in_array($current_screen->taxonomy, $taxonomies)) {
|
||||
return 'bloques-dashboard';
|
||||
}
|
||||
|
||||
return $parent_file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Corregir submenú activo
|
||||
*/
|
||||
public static function fix_submenu($submenu_file) {
|
||||
global $current_screen;
|
||||
|
||||
if (!$current_screen) {
|
||||
return $submenu_file;
|
||||
}
|
||||
|
||||
$post_types = Bloques_Post_Types::get_post_types();
|
||||
$taxonomies = Bloques_Taxonomies::get_taxonomies();
|
||||
|
||||
// CPTs
|
||||
if (in_array($current_screen->post_type, $post_types)) {
|
||||
if ($current_screen->base === 'post') {
|
||||
return 'post-new.php?post_type=' . $current_screen->post_type;
|
||||
}
|
||||
return 'edit.php?post_type=' . $current_screen->post_type;
|
||||
}
|
||||
|
||||
// Taxonomías
|
||||
if (in_array($current_screen->taxonomy, $taxonomies)) {
|
||||
return 'edit-tags.php?taxonomy=' . $current_screen->taxonomy;
|
||||
}
|
||||
|
||||
return $submenu_file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renderizar dashboard
|
||||
*/
|
||||
public static function render_dashboard() {
|
||||
// Obtener conteos
|
||||
$counts = [
|
||||
'actuacion' => wp_count_posts('actuacion')->publish ?? 0,
|
||||
'recurso_bloques' => wp_count_posts('recurso_bloques')->publish ?? 0,
|
||||
'evento_bloques' => wp_count_posts('evento_bloques')->publish ?? 0,
|
||||
];
|
||||
|
||||
$iniciativas = wp_count_terms(['taxonomy' => 'iniciativa', 'hide_empty' => false]);
|
||||
$lineas = wp_count_terms(['taxonomy' => 'linea_trabajo', 'hide_empty' => false]);
|
||||
|
||||
include BLOQUES_PLUGIN_DIR . 'templates/admin/dashboard.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Renderizar página de seeder
|
||||
*/
|
||||
public static function render_seeder_page() {
|
||||
// Procesar acción si se envió el formulario
|
||||
if (isset($_POST['bloques_seed_action']) && wp_verify_nonce($_POST['bloques_seed_nonce'], 'bloques_seed')) {
|
||||
$result = Bloques_Data_Seeder::seed_all();
|
||||
$message = $result ?
|
||||
__('Datos cargados correctamente.', 'bloques-transicion') :
|
||||
__('Error al cargar los datos.', 'bloques-transicion');
|
||||
$message_type = $result ? 'success' : 'error';
|
||||
}
|
||||
|
||||
include BLOQUES_PLUGIN_DIR . 'templates/admin/seeder.php';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
<?php
|
||||
/**
|
||||
* Carga de datos iniciales (Iniciativas y Líneas de Trabajo)
|
||||
*
|
||||
* @package Bloques_Transicion
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class Bloques_Data_Seeder {
|
||||
|
||||
/**
|
||||
* Cargar todos los datos iniciales
|
||||
*/
|
||||
public static function seed_all() {
|
||||
$result_iniciativas = self::seed_iniciativas();
|
||||
$result_lineas = self::seed_lineas_trabajo();
|
||||
$result_tipos = self::seed_tipos_evento();
|
||||
|
||||
return $result_iniciativas && $result_lineas && $result_tipos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cargar Iniciativas
|
||||
*/
|
||||
public static function seed_iniciativas() {
|
||||
$iniciativas = [
|
||||
[
|
||||
'name' => 'Oficina de Transición Justa',
|
||||
'slug' => 'oficina-transicion-justa',
|
||||
'description' => 'Acompañamiento técnico, asesoramiento y formación para personas y comunidades interesadas en impulsar iniciativas de cambio.',
|
||||
'meta' => [
|
||||
'ubicacion_texto' => 'Puente y Villa de Vallecas',
|
||||
'estado' => 'Abierta - consultas permanentes',
|
||||
'color' => '#1E6B52',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Coles en transición',
|
||||
'slug' => 'coles-transicion',
|
||||
'description' => 'Acompañamiento en la elaboración e implementación de planes de adaptación climática en centros educativos y otras iniciativas de cambio con participación de la comunidad escolar.',
|
||||
'meta' => [
|
||||
'ubicacion_texto' => '7 centros en Puente y Villa de Vallecas',
|
||||
'estado' => 'En marcha',
|
||||
'color' => '#4A9B7F',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Comunidad energética',
|
||||
'slug' => 'comunidad-energetica',
|
||||
'description' => 'Acompañamiento en la creación de la Comunidad Energética Vallekana para producir, compartir y gestionar energía renovable.',
|
||||
'meta' => [
|
||||
'ubicacion_texto' => 'Puente de Vallecas',
|
||||
'estado' => 'En proceso de constitución',
|
||||
'color' => '#F4A261',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Creación de redes',
|
||||
'slug' => 'creacion-redes',
|
||||
'description' => 'Intercambio de conocimientos y participación. Acompañamiento e impulso del funcionamiento y la creación de redes locales y estatales multiactor para el aprendizaje y la puesta en marcha de acciones hacia la transición justa.',
|
||||
'meta' => [
|
||||
'ubicacion_texto' => 'Madrid, Cataluña y Valencia',
|
||||
'estado' => 'En proceso',
|
||||
'color' => '#E76F51',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
return self::insert_terms($iniciativas, 'iniciativa');
|
||||
}
|
||||
|
||||
/**
|
||||
* Cargar Líneas de Trabajo
|
||||
*/
|
||||
public static function seed_lineas_trabajo() {
|
||||
$lineas = [
|
||||
[
|
||||
'name' => 'Energía',
|
||||
'slug' => 'energia',
|
||||
'description' => 'Rehabilitación edificios, comunidades energéticas y autoconsumo renovable',
|
||||
'meta' => [
|
||||
'color' => '#F4A261',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Cuidados',
|
||||
'slug' => 'cuidados',
|
||||
'description' => 'Redes de apoyo mutuo y espacios vecinales',
|
||||
'meta' => [
|
||||
'color' => '#E9C46A',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Alimentación',
|
||||
'slug' => 'alimentacion',
|
||||
'description' => 'Alimentación sostenible y saludable y redes de consumo',
|
||||
'meta' => [
|
||||
'color' => '#2A9D8F',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Movilidad',
|
||||
'slug' => 'movilidad',
|
||||
'description' => 'Movilidad sostenible, uso de la bicicleta y espacio público',
|
||||
'meta' => [
|
||||
'color' => '#264653',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Renaturalización',
|
||||
'slug' => 'renaturalizacion',
|
||||
'description' => 'Renaturalización de comunidades y patios escolares',
|
||||
'meta' => [
|
||||
'color' => '#1E6B52',
|
||||
],
|
||||
],
|
||||
[
|
||||
'name' => 'Reutilización',
|
||||
'slug' => 'reutilizacion',
|
||||
'description' => 'Economía circular y consumo colaborativo',
|
||||
'meta' => [
|
||||
'color' => '#E76F51',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
return self::insert_terms($lineas, 'linea_trabajo');
|
||||
}
|
||||
|
||||
/**
|
||||
* Cargar Tipos de Evento
|
||||
*/
|
||||
public static function seed_tipos_evento() {
|
||||
$tipos = [
|
||||
[
|
||||
'name' => 'Online',
|
||||
'slug' => 'online',
|
||||
'description' => 'Evento que se realiza de forma virtual',
|
||||
],
|
||||
[
|
||||
'name' => 'Presencial',
|
||||
'slug' => 'presencial',
|
||||
'description' => 'Evento que se realiza de forma presencial',
|
||||
],
|
||||
];
|
||||
|
||||
return self::insert_terms($tipos, 'tipo_evento');
|
||||
}
|
||||
|
||||
/**
|
||||
* Insertar términos en una taxonomía
|
||||
*/
|
||||
private static function insert_terms($terms, $taxonomy) {
|
||||
$success = true;
|
||||
|
||||
foreach ($terms as $term_data) {
|
||||
// Verificar si ya existe
|
||||
$existing = term_exists($term_data['slug'], $taxonomy);
|
||||
|
||||
if ($existing) {
|
||||
$term_id = is_array($existing) ? $existing['term_id'] : $existing;
|
||||
|
||||
// Actualizar descripción si existe
|
||||
wp_update_term($term_id, $taxonomy, [
|
||||
'description' => $term_data['description'] ?? '',
|
||||
]);
|
||||
} else {
|
||||
// Crear nuevo término
|
||||
$result = wp_insert_term(
|
||||
$term_data['name'],
|
||||
$taxonomy,
|
||||
[
|
||||
'slug' => $term_data['slug'],
|
||||
'description' => $term_data['description'] ?? '',
|
||||
]
|
||||
);
|
||||
|
||||
if (is_wp_error($result)) {
|
||||
$success = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
$term_id = $result['term_id'];
|
||||
}
|
||||
|
||||
// Guardar meta datos con ACF si está disponible
|
||||
if (!empty($term_data['meta']) && function_exists('update_field')) {
|
||||
foreach ($term_data['meta'] as $key => $value) {
|
||||
update_field($key, $value, $taxonomy . '_' . $term_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar todos los datos del plugin
|
||||
*/
|
||||
public static function clear_all() {
|
||||
// Eliminar términos de iniciativas
|
||||
$iniciativas = get_terms([
|
||||
'taxonomy' => 'iniciativa',
|
||||
'hide_empty' => false,
|
||||
]);
|
||||
foreach ($iniciativas as $term) {
|
||||
wp_delete_term($term->term_id, 'iniciativa');
|
||||
}
|
||||
|
||||
// Eliminar términos de líneas de trabajo
|
||||
$lineas = get_terms([
|
||||
'taxonomy' => 'linea_trabajo',
|
||||
'hide_empty' => false,
|
||||
]);
|
||||
foreach ($lineas as $term) {
|
||||
wp_delete_term($term->term_id, 'linea_trabajo');
|
||||
}
|
||||
|
||||
// Eliminar tipos de evento
|
||||
$tipos = get_terms([
|
||||
'taxonomy' => 'tipo_evento',
|
||||
'hide_empty' => false,
|
||||
]);
|
||||
foreach ($tipos as $term) {
|
||||
wp_delete_term($term->term_id, 'tipo_evento');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Registro de Custom Post Types
|
||||
*
|
||||
* @package Bloques_Transicion
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class Bloques_Post_Types
|
||||
{
|
||||
|
||||
/**
|
||||
* Registrar todos los CPTs
|
||||
*/
|
||||
public static function register()
|
||||
{
|
||||
self::register_actuacion();
|
||||
self::register_recurso();
|
||||
self::register_evento();
|
||||
}
|
||||
|
||||
/**
|
||||
* CPT: Actuaciones
|
||||
*/
|
||||
private static function register_actuacion()
|
||||
{
|
||||
$labels = [
|
||||
'name' => _x('Actuaciones', 'Post type general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Actuación', 'Post type singular name', 'bloques-transicion'),
|
||||
'menu_name' => _x('Actuaciones', 'Admin Menu text', 'bloques-transicion'),
|
||||
'name_admin_bar' => _x('Actuación', 'Add New on Toolbar', 'bloques-transicion'),
|
||||
'add_new' => __('Añadir nueva', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nueva Actuación', 'bloques-transicion'),
|
||||
'new_item' => __('Nueva Actuación', 'bloques-transicion'),
|
||||
'edit_item' => __('Editar Actuación', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Actuación', 'bloques-transicion'),
|
||||
'all_items' => __('Todas las Actuaciones', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Actuaciones', 'bloques-transicion'),
|
||||
'parent_item_colon' => __('Actuación padre:', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron actuaciones.', 'bloques-transicion'),
|
||||
'not_found_in_trash' => __('No hay actuaciones en la papelera.', 'bloques-transicion'),
|
||||
'featured_image' => _x('Imagen destacada', 'Overrides the "Featured Image" phrase', 'bloques-transicion'),
|
||||
'set_featured_image' => _x('Establecer imagen destacada', 'Overrides the "Set featured image" phrase', 'bloques-transicion'),
|
||||
'remove_featured_image' => _x('Eliminar imagen destacada', 'Overrides the "Remove featured image" phrase', 'bloques-transicion'),
|
||||
'use_featured_image' => _x('Usar como imagen destacada', 'Overrides the "Use as featured image" phrase', 'bloques-transicion'),
|
||||
'archives' => _x('Archivo de Actuaciones', 'The post type archive label', 'bloques-transicion'),
|
||||
'insert_into_item' => _x('Insertar en actuación', 'Overrides the "Insert into post" phrase', 'bloques-transicion'),
|
||||
'uploaded_to_this_item' => _x('Subido a esta actuación', 'Overrides the "Uploaded to this post" phrase', 'bloques-transicion'),
|
||||
'filter_items_list' => _x('Filtrar lista de actuaciones', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list_navigation' => _x('Navegación de actuaciones', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list' => _x('Lista de actuaciones', 'Screen reader text', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'public' => true,
|
||||
'publicly_queryable' => true,
|
||||
'show_ui' => true,
|
||||
'show_in_menu' => false, // Lo añadimos manualmente al menú de Bloques
|
||||
'query_var' => true,
|
||||
'rewrite' => ['slug' => 'bloques-en-transicion/actuaciones', 'with_front' => false],
|
||||
'capability_type' => 'post',
|
||||
'has_archive' => true,
|
||||
'hierarchical' => false,
|
||||
'menu_position' => null,
|
||||
'menu_icon' => 'dashicons-location-alt',
|
||||
'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'revisions'],
|
||||
'show_in_rest' => true,
|
||||
'taxonomies' => ['iniciativa', 'linea_trabajo'],
|
||||
];
|
||||
|
||||
register_post_type('actuacion', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* CPT: Recursos
|
||||
*/
|
||||
private static function register_recurso()
|
||||
{
|
||||
$labels = [
|
||||
'name' => _x('Recursos', 'Post type general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Recurso', 'Post type singular name', 'bloques-transicion'),
|
||||
'menu_name' => _x('Recursos', 'Admin Menu text', 'bloques-transicion'),
|
||||
'name_admin_bar' => _x('Recurso', 'Add New on Toolbar', 'bloques-transicion'),
|
||||
'add_new' => __('Añadir nuevo', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nuevo Recurso', 'bloques-transicion'),
|
||||
'new_item' => __('Nuevo Recurso', 'bloques-transicion'),
|
||||
'edit_item' => __('Editar Recurso', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Recurso', 'bloques-transicion'),
|
||||
'all_items' => __('Todos los Recursos', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Recursos', 'bloques-transicion'),
|
||||
'parent_item_colon' => __('Recurso padre:', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron recursos.', 'bloques-transicion'),
|
||||
'not_found_in_trash' => __('No hay recursos en la papelera.', 'bloques-transicion'),
|
||||
'featured_image' => _x('Imagen del recurso', 'Overrides the "Featured Image" phrase', 'bloques-transicion'),
|
||||
'set_featured_image' => _x('Establecer imagen', 'Overrides the "Set featured image" phrase', 'bloques-transicion'),
|
||||
'remove_featured_image' => _x('Eliminar imagen', 'Overrides the "Remove featured image" phrase', 'bloques-transicion'),
|
||||
'use_featured_image' => _x('Usar como imagen', 'Overrides the "Use as featured image" phrase', 'bloques-transicion'),
|
||||
'archives' => _x('Archivo de Recursos', 'The post type archive label', 'bloques-transicion'),
|
||||
'insert_into_item' => _x('Insertar en recurso', 'Overrides the "Insert into post" phrase', 'bloques-transicion'),
|
||||
'uploaded_to_this_item' => _x('Subido a este recurso', 'Overrides the "Uploaded to this post" phrase', 'bloques-transicion'),
|
||||
'filter_items_list' => _x('Filtrar lista de recursos', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list_navigation' => _x('Navegación de recursos', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list' => _x('Lista de recursos', 'Screen reader text', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'public' => true,
|
||||
'publicly_queryable' => true,
|
||||
'show_ui' => true,
|
||||
'show_in_menu' => false,
|
||||
'query_var' => true,
|
||||
'rewrite' => ['slug' => 'bloques-en-transicion/recursos', 'with_front' => false],
|
||||
'capability_type' => 'post',
|
||||
'has_archive' => false, // Desactivado para usar la página de Divi
|
||||
'hierarchical' => false,
|
||||
'menu_position' => null,
|
||||
'menu_icon' => 'dashicons-media-document',
|
||||
'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'revisions'],
|
||||
'show_in_rest' => true,
|
||||
'taxonomies' => ['iniciativa', 'linea_trabajo'],
|
||||
];
|
||||
|
||||
register_post_type('recurso_bloques', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* CPT: Eventos
|
||||
*/
|
||||
private static function register_evento()
|
||||
{
|
||||
$labels = [
|
||||
'name' => _x('Eventos', 'Post type general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Evento', 'Post type singular name', 'bloques-transicion'),
|
||||
'menu_name' => _x('Eventos', 'Admin Menu text', 'bloques-transicion'),
|
||||
'name_admin_bar' => _x('Evento', 'Add New on Toolbar', 'bloques-transicion'),
|
||||
'add_new' => __('Añadir nuevo', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nuevo Evento', 'bloques-transicion'),
|
||||
'new_item' => __('Nuevo Evento', 'bloques-transicion'),
|
||||
'edit_item' => __('Editar Evento', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Evento', 'bloques-transicion'),
|
||||
'all_items' => __('Todos los Eventos', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Eventos', 'bloques-transicion'),
|
||||
'parent_item_colon' => __('Evento padre:', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron eventos.', 'bloques-transicion'),
|
||||
'not_found_in_trash' => __('No hay eventos en la papelera.', 'bloques-transicion'),
|
||||
'featured_image' => _x('Imagen del evento', 'Overrides the "Featured Image" phrase', 'bloques-transicion'),
|
||||
'set_featured_image' => _x('Establecer imagen', 'Overrides the "Set featured image" phrase', 'bloques-transicion'),
|
||||
'remove_featured_image' => _x('Eliminar imagen', 'Overrides the "Remove featured image" phrase', 'bloques-transicion'),
|
||||
'use_featured_image' => _x('Usar como imagen', 'Overrides the "Use as featured image" phrase', 'bloques-transicion'),
|
||||
'archives' => _x('Archivo de Eventos', 'The post type archive label', 'bloques-transicion'),
|
||||
'insert_into_item' => _x('Insertar en evento', 'Overrides the "Insert into post" phrase', 'bloques-transicion'),
|
||||
'uploaded_to_this_item' => _x('Subido a este evento', 'Overrides the "Uploaded to this post" phrase', 'bloques-transicion'),
|
||||
'filter_items_list' => _x('Filtrar lista de eventos', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list_navigation' => _x('Navegación de eventos', 'Screen reader text', 'bloques-transicion'),
|
||||
'items_list' => _x('Lista de eventos', 'Screen reader text', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'public' => true,
|
||||
'publicly_queryable' => true,
|
||||
'show_ui' => true,
|
||||
'show_in_menu' => false,
|
||||
'query_var' => true,
|
||||
'rewrite' => ['slug' => 'bloques-en-transicion/eventos', 'with_front' => false],
|
||||
'capability_type' => 'post',
|
||||
'has_archive' => false, // Desactivado para usar la página de Divi
|
||||
'hierarchical' => false,
|
||||
'menu_position' => null,
|
||||
'menu_icon' => 'dashicons-calendar-alt',
|
||||
'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'revisions'],
|
||||
'show_in_rest' => true,
|
||||
'taxonomies' => ['iniciativa', 'linea_trabajo', 'tipo_evento'],
|
||||
];
|
||||
|
||||
register_post_type('evento_bloques', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtener todos los CPTs del plugin
|
||||
*/
|
||||
public static function get_post_types()
|
||||
{
|
||||
return ['actuacion', 'recurso_bloques', 'evento_bloques'];
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
/**
|
||||
* Registro de Taxonomías personalizadas
|
||||
*
|
||||
* @package Bloques_Transicion
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
class Bloques_Taxonomies {
|
||||
|
||||
/**
|
||||
* Registrar todas las taxonomías
|
||||
*/
|
||||
public static function register() {
|
||||
self::register_iniciativa();
|
||||
self::register_linea_trabajo();
|
||||
self::register_tipo_evento();
|
||||
}
|
||||
|
||||
/**
|
||||
* Taxonomía: Iniciativas
|
||||
*/
|
||||
private static function register_iniciativa() {
|
||||
$labels = [
|
||||
'name' => _x('Iniciativas', 'taxonomy general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Iniciativa', 'taxonomy singular name', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Iniciativas', 'bloques-transicion'),
|
||||
'popular_items' => __('Iniciativas populares', 'bloques-transicion'),
|
||||
'all_items' => __('Todas las Iniciativas', 'bloques-transicion'),
|
||||
'parent_item' => __('Iniciativa padre', 'bloques-transicion'),
|
||||
'parent_item_colon' => __('Iniciativa padre:', 'bloques-transicion'),
|
||||
'edit_item' => __('Editar Iniciativa', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Iniciativa', 'bloques-transicion'),
|
||||
'update_item' => __('Actualizar Iniciativa', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nueva Iniciativa', 'bloques-transicion'),
|
||||
'new_item_name' => __('Nombre de nueva Iniciativa', 'bloques-transicion'),
|
||||
'separate_items_with_commas' => __('Separar iniciativas con comas', 'bloques-transicion'),
|
||||
'add_or_remove_items' => __('Añadir o eliminar iniciativas', 'bloques-transicion'),
|
||||
'choose_from_most_used' => __('Elegir de las más usadas', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron iniciativas.', 'bloques-transicion'),
|
||||
'no_terms' => __('No hay iniciativas', 'bloques-transicion'),
|
||||
'menu_name' => __('Iniciativas', 'bloques-transicion'),
|
||||
'items_list_navigation' => __('Navegación de iniciativas', 'bloques-transicion'),
|
||||
'items_list' => __('Lista de iniciativas', 'bloques-transicion'),
|
||||
'back_to_items' => __('← Volver a Iniciativas', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'hierarchical' => true, // Como categorías
|
||||
'public' => true,
|
||||
'show_ui' => true,
|
||||
'show_admin_column' => true,
|
||||
'show_in_nav_menus' => true,
|
||||
'show_tagcloud' => false,
|
||||
'show_in_rest' => true,
|
||||
'rewrite' => ['slug' => 'bloques/iniciativa', 'with_front' => false],
|
||||
'query_var' => true,
|
||||
];
|
||||
|
||||
// Asociar a todos los CPTs de Bloques
|
||||
$post_types = ['actuacion', 'recurso_bloques', 'evento_bloques'];
|
||||
register_taxonomy('iniciativa', $post_types, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Taxonomía: Líneas de Trabajo
|
||||
*/
|
||||
private static function register_linea_trabajo() {
|
||||
$labels = [
|
||||
'name' => _x('Líneas de Trabajo', 'taxonomy general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Línea de Trabajo', 'taxonomy singular name', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Líneas de Trabajo', 'bloques-transicion'),
|
||||
'popular_items' => __('Líneas de Trabajo populares', 'bloques-transicion'),
|
||||
'all_items' => __('Todas las Líneas de Trabajo', 'bloques-transicion'),
|
||||
'parent_item' => __('Línea de Trabajo padre', 'bloques-transicion'),
|
||||
'parent_item_colon' => __('Línea de Trabajo padre:', 'bloques-transicion'),
|
||||
'edit_item' => __('Editar Línea de Trabajo', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Línea de Trabajo', 'bloques-transicion'),
|
||||
'update_item' => __('Actualizar Línea de Trabajo', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nueva Línea de Trabajo', 'bloques-transicion'),
|
||||
'new_item_name' => __('Nombre de nueva Línea de Trabajo', 'bloques-transicion'),
|
||||
'separate_items_with_commas' => __('Separar líneas con comas', 'bloques-transicion'),
|
||||
'add_or_remove_items' => __('Añadir o eliminar líneas', 'bloques-transicion'),
|
||||
'choose_from_most_used' => __('Elegir de las más usadas', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron líneas de trabajo.', 'bloques-transicion'),
|
||||
'no_terms' => __('No hay líneas de trabajo', 'bloques-transicion'),
|
||||
'menu_name' => __('Líneas de Trabajo', 'bloques-transicion'),
|
||||
'items_list_navigation' => __('Navegación de líneas', 'bloques-transicion'),
|
||||
'items_list' => __('Lista de líneas', 'bloques-transicion'),
|
||||
'back_to_items' => __('← Volver a Líneas de Trabajo', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'hierarchical' => true,
|
||||
'public' => true,
|
||||
'show_ui' => true,
|
||||
'show_admin_column' => true,
|
||||
'show_in_nav_menus' => true,
|
||||
'show_tagcloud' => false,
|
||||
'show_in_rest' => true,
|
||||
'rewrite' => ['slug' => 'bloques/linea-trabajo', 'with_front' => false],
|
||||
'query_var' => true,
|
||||
];
|
||||
|
||||
$post_types = ['actuacion', 'recurso_bloques', 'evento_bloques'];
|
||||
register_taxonomy('linea_trabajo', $post_types, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Taxonomía: Tipo de Evento
|
||||
*/
|
||||
private static function register_tipo_evento() {
|
||||
$labels = [
|
||||
'name' => _x('Tipos de Evento', 'taxonomy general name', 'bloques-transicion'),
|
||||
'singular_name' => _x('Tipo de Evento', 'taxonomy singular name', 'bloques-transicion'),
|
||||
'search_items' => __('Buscar Tipos', 'bloques-transicion'),
|
||||
'popular_items' => __('Tipos populares', 'bloques-transicion'),
|
||||
'all_items' => __('Todos los Tipos', 'bloques-transicion'),
|
||||
'parent_item' => null,
|
||||
'parent_item_colon' => null,
|
||||
'edit_item' => __('Editar Tipo', 'bloques-transicion'),
|
||||
'view_item' => __('Ver Tipo', 'bloques-transicion'),
|
||||
'update_item' => __('Actualizar Tipo', 'bloques-transicion'),
|
||||
'add_new_item' => __('Añadir nuevo Tipo', 'bloques-transicion'),
|
||||
'new_item_name' => __('Nombre del nuevo Tipo', 'bloques-transicion'),
|
||||
'separate_items_with_commas' => __('Separar tipos con comas', 'bloques-transicion'),
|
||||
'add_or_remove_items' => __('Añadir o eliminar tipos', 'bloques-transicion'),
|
||||
'choose_from_most_used' => __('Elegir de los más usados', 'bloques-transicion'),
|
||||
'not_found' => __('No se encontraron tipos.', 'bloques-transicion'),
|
||||
'no_terms' => __('No hay tipos', 'bloques-transicion'),
|
||||
'menu_name' => __('Tipos de Evento', 'bloques-transicion'),
|
||||
'items_list_navigation' => __('Navegación de tipos', 'bloques-transicion'),
|
||||
'items_list' => __('Lista de tipos', 'bloques-transicion'),
|
||||
'back_to_items' => __('← Volver a Tipos', 'bloques-transicion'),
|
||||
];
|
||||
|
||||
$args = [
|
||||
'labels' => $labels,
|
||||
'hierarchical' => false, // Como etiquetas (permite múltiple selección)
|
||||
'public' => true,
|
||||
'show_ui' => true,
|
||||
'show_admin_column' => true,
|
||||
'show_in_nav_menus' => true,
|
||||
'show_tagcloud' => false,
|
||||
'show_in_rest' => true,
|
||||
'rewrite' => ['slug' => 'bloques/tipo-evento', 'with_front' => false],
|
||||
'query_var' => true,
|
||||
];
|
||||
|
||||
register_taxonomy('tipo_evento', ['evento_bloques'], $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtener todas las taxonomías del plugin
|
||||
*/
|
||||
public static function get_taxonomies() {
|
||||
return ['iniciativa', 'linea_trabajo', 'tipo_evento'];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user