// temp placeholder [ 'name' => 'Banners SafeVTC', 'singular_name' => 'Banner', 'add_new' => 'Añadir banner', 'add_new_item' => 'Nuevo banner publicitario', 'edit_item' => 'Editar banner', 'new_item' => 'Nuevo banner', 'view_item' => 'Ver banner', 'search_items' => 'Buscar banners', 'not_found' => 'No hay banners', 'not_found_in_trash' => 'No hay banners en la papelera', 'menu_name' => 'Banners SafeVTC', ], 'public' => false, 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => 'dashicons-megaphone', 'menu_position' => 25, 'supports' => [ 'title' ], 'capability_type' => 'post', ] ); } // ============================================================ // META BOX: Datos del Banner // ============================================================ add_action( 'add_meta_boxes', 'svb_register_meta_boxes' ); function svb_register_meta_boxes() { add_meta_box( 'svb_datos', '📢 Configuración del Banner', 'svb_render_meta_box', 'sv_banner', 'normal', 'high' ); add_meta_box( 'svb_preview', '👁️ Vista previa', 'svb_render_preview_box', 'sv_banner', 'side', 'default' ); } function svb_render_meta_box( $post ) { wp_nonce_field( 'svb_save_banner', 'svb_nonce' ); $f = [ 'modo' => get_post_meta( $post->ID, '_svb_modo', true ) ?: 'imagen', 'imagen_url' => get_post_meta( $post->ID, '_svb_imagen_url', true ), 'html_content' => get_post_meta( $post->ID, '_svb_html_content', true ), 'click_url' => get_post_meta( $post->ID, '_svb_click_url', true ), 'texto' => get_post_meta( $post->ID, '_svb_texto', true ), 'subtexto' => get_post_meta( $post->ID, '_svb_subtexto', true ), 'cta_texto' => get_post_meta( $post->ID, '_svb_cta_texto', true ), 'ciudades' => get_post_meta( $post->ID, '_svb_ciudades', true ), 'fecha_inicio' => get_post_meta( $post->ID, '_svb_fecha_inicio', true ), 'fecha_fin' => get_post_meta( $post->ID, '_svb_fecha_fin', true ), 'tipo' => get_post_meta( $post->ID, '_svb_tipo', true ), 'notas' => get_post_meta( $post->ID, '_svb_notas', true ), ]; $modo_actual = esc_js( $f['modo'] ); ?>

🎨 Tipo de contenido del banner

🖼️ Imagen del Banner

Tamaño recomendado: 728×90 px (leaderboard) o 300×250 px (cuadrado).

📝 Contenido de texto

💻 Código HTML personalizado

⚠️ El HTML se insertará tal cual en el frontend. Soporta <iframe>, <script> y código de redes publicitarias (Google AdSense, etc.). Solo accesible a admins.

🎯 Segmentación y Programación

Vacío = mostrar en TODAS las fichas.
ID, '_svb_modo', true ) ?: 'imagen'; $img = get_post_meta( $post->ID, '_svb_imagen_url', true ); $html_cnt = get_post_meta( $post->ID, '_svb_html_content', true ); $url = get_post_meta( $post->ID, '_svb_click_url', true ); $texto = get_post_meta( $post->ID, '_svb_texto', true ) ?: $post->post_title; $sub = get_post_meta( $post->ID, '_svb_subtexto', true ); $cta = get_post_meta( $post->ID, '_svb_cta_texto', true ) ?: 'Ver más'; $ciudades = get_post_meta( $post->ID, '_svb_ciudades', true ); $inicio = get_post_meta( $post->ID, '_svb_fecha_inicio', true ); $fin = get_post_meta( $post->ID, '_svb_fecha_fin', true ); $tipo = get_post_meta( $post->ID, '_svb_tipo', true ); $tipos = [ 'promo' => [ 'label' => '📣 Promo interna', 'class' => 'svb-tipo-promo' ], 'conductor' => [ 'label' => '🚗 Conductor', 'class' => 'svb-tipo-conductor' ], 'externo' => [ 'label' => '💼 Anunciante externo', 'class' => 'svb-tipo-externo' ], ]; $tipo_info = $tipos[ $tipo ] ?? $tipos['promo']; $modos_label = [ 'imagen' => '🖼️ Imagen', 'texto' => '📝 Texto', 'html' => '💻 HTML libre' ]; ?>
200 ) echo '…'; ?>
Publicidad

' . esc_html( $sub ) . '

'; ?> ' . esc_html( $cta ) . ''; ?>
Publicidad
Modo:
Tipo:
Ciudades:
Activo desde:
Activo hasta:
post_status === 'publish' ) : ?>

✅ ACTIVO — visible en las fichas

⏸️ BORRADOR — no visible

esc_url_raw( $_POST['svb_imagen_url'] ?? '' ), '_svb_texto' => sanitize_text_field( $_POST['svb_texto'] ?? '' ), '_svb_subtexto' => sanitize_text_field( $_POST['svb_subtexto'] ?? '' ), '_svb_cta_texto' => sanitize_text_field( $_POST['svb_cta_texto'] ?? '' ), '_svb_ciudades' => sanitize_text_field( $_POST['svb_ciudades'] ?? '' ), '_svb_fecha_inicio' => sanitize_text_field( $_POST['svb_fecha_inicio'] ?? '' ), '_svb_fecha_fin' => sanitize_text_field( $_POST['svb_fecha_fin'] ?? '' ), '_svb_tipo' => sanitize_text_field( $_POST['svb_tipo'] ?? 'promo' ), '_svb_notas' => sanitize_textarea_field( $_POST['svb_notas'] ?? '' ), ]; foreach ( $text_fields as $meta_key => $val ) { if ( in_array( $meta_key, [ '_svb_fecha_inicio', '_svb_fecha_fin' ], true ) && $val === '' ) { delete_post_meta( $post_id, $meta_key ); } else { update_post_meta( $post_id, $meta_key, $val ); } } } // ============================================================ // COLUMNAS EN LA LISTA DE BANNERS // ============================================================ add_filter( 'manage_sv_banner_posts_columns', function( $cols ) { return [ 'cb' => $cols['cb'], 'title' => 'Banner', 'svb_modo' => 'Modo', 'svb_preview' => 'Vista previa', 'svb_tipo' => 'Tipo', 'svb_ciudades' => 'Ciudades', 'svb_fechas' => 'Vigencia', 'svb_estado' => 'Estado', 'date' => 'Creado', ]; } ); add_action( 'manage_sv_banner_posts_custom_column', function( $col, $post_id ) { switch ( $col ) { case 'svb_modo': $modo = get_post_meta( $post_id, '_svb_modo', true ) ?: 'imagen'; $icons = [ 'imagen' => '🖼️', 'texto' => '📝', 'html' => '💻' ]; $names = [ 'imagen' => 'Imagen', 'texto' => 'Texto', 'html' => 'HTML' ]; echo '' . ( $icons[$modo] ?? '' ) . ' ' . esc_html( $names[$modo] ?? $modo ) . ''; break; case 'svb_preview': $modo = get_post_meta( $post_id, '_svb_modo', true ) ?: 'imagen'; if ( $modo === 'imagen' ) { $img = get_post_meta( $post_id, '_svb_imagen_url', true ); if ( $img ) { echo ''; } else { echo 'Sin imagen'; } } elseif ( $modo === 'texto' ) { $texto = get_post_meta( $post_id, '_svb_texto', true ); echo '' . esc_html( $texto ?: '—' ) . ''; } else { $html = get_post_meta( $post_id, '_svb_html_content', true ); echo '' . esc_html( mb_substr( strip_tags( $html ), 0, 40 ) ) . '…'; } break; case 'svb_tipo': $tipo = get_post_meta( $post_id, '_svb_tipo', true ); $tipos = [ 'promo' => '📣 Promo', 'conductor' => '🚗 Conductor', 'externo' => '💼 Externo' ]; echo esc_html( $tipos[ $tipo ] ?? '—' ); break; case 'svb_ciudades': $c = get_post_meta( $post_id, '_svb_ciudades', true ); echo $c ? '' . esc_html( $c ) . '' : '🌍 Todas'; break; case 'svb_fechas': $ini = get_post_meta( $post_id, '_svb_fecha_inicio', true ); $fin = get_post_meta( $post_id, '_svb_fecha_fin', true ); echo ''; echo ( $ini ?: '—' ) . ' → ' . ( $fin ?: '∞' ); echo ''; break; case 'svb_estado': $ini = get_post_meta( $post_id, '_svb_fecha_inicio', true ); $fin = get_post_meta( $post_id, '_svb_fecha_fin', true ); $hoy = date( 'Y-m-d' ); $status = get_post_status( $post_id ); if ( $status !== 'publish' ) { echo '⏸️ Borrador'; } elseif ( $fin && $fin < $hoy ) { echo '🔴 Expirado'; } elseif ( $ini && $ini > $hoy ) { echo '⏳ Programado'; } else { echo '✅ Activo'; } break; } }, 10, 2 ); add_filter( 'manage_edit-sv_banner_sortable_columns', function( $cols ) { $cols['svb_estado'] = 'svb_estado'; return $cols; } ); // ============================================================ // AVISO SI NO HAY BANNERS ACTIVOS // ============================================================ add_action( 'admin_notices', function() { $screen = get_current_screen(); if ( ! $screen || $screen->post_type !== 'sv_banner' ) return; $activos = get_posts( [ 'post_type' => 'sv_banner', 'post_status' => 'publish', 'posts_per_page' => 1, ] ); if ( empty( $activos ) ) { echo '

' . '⚠️ SafeVTC: No hay banners activos. Los perfiles de conductores no reclamados mostrarán el banner de registro por defecto.' . '

'; } } );

ALLAKI

Carregando...

Deixe um comentário

Selecione uma avaliação
Rolar para cima