Loading...
No Records Found
Sorry, no records were found. Please adjust your search criteria and try again.
Maps failed to load
Sorry, unable to load the Maps API.
EVTC095230190
// 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
ð Contenido de texto
ð» Código HTML personalizado
<iframe>, <script> y código de redes publicitarias (Google AdSense, etc.). Solo accesible a admins.
ð¯ Segmentación y Programación
â 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 '' . 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.' . '