// 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
>
ð Texto
>
ð» HTML libre
ð¼ï¸ Imagen del Banner
ð» Código HTML personalizado
HTML del banner
â ï¸ 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
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.'
. '
';
}
} );
Ir al contenido
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.
El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.
Gestionar consentimiento
Spanish