/** * Galeria de imagenes de detalle para productos WooCommerce * Anade un campo en el editor de producto donde pegas URLs de imagenes * (una por linea). Al guardar, las descarga y las convierte en imagenes * reales de la biblioteca de medios. Luego las muestra en una seccion * "Detalles" despues de las especificaciones del producto. */ add_action( 'woocommerce_product_options_general_product_data', 'mqt_campo_imagenes_detalle' ); function mqt_campo_imagenes_detalle() { global $post; echo '
'; woocommerce_wp_textarea_input( array( 'id' => '_mqt_urls_detalle', 'label' => 'Imagenes de detalle (URLs)', 'desc_tip' => true, 'description' => 'Pega una URL de imagen por linea. Al guardar el producto se descargan y se anaden a la galeria de detalles automaticamente.', 'value' => get_post_meta( $post->ID, '_mqt_urls_detalle', true ), ) ); echo '
'; } add_action( 'woocommerce_process_product_meta', 'mqt_guardar_imagenes_detalle' ); function mqt_guardar_imagenes_detalle( $post_id ) { if ( ! isset( $_POST['_mqt_urls_detalle'] ) ) { return; } $texto_nuevo = sanitize_textarea_field( wp_unslash( $_POST['_mqt_urls_detalle'] ) ); update_post_meta( $post_id, '_mqt_urls_detalle', $texto_nuevo ); $procesadas = get_post_meta( $post_id, '_mqt_urls_detalle_procesadas', true ); $procesadas = is_array( $procesadas ) ? $procesadas : array(); $ids_actuales = get_post_meta( $post_id, '_mqt_ids_detalle', true ); $ids_actuales = is_array( $ids_actuales ) ? $ids_actuales : array(); $urls_nuevas = array_filter( array_map( 'trim', explode( "\n", $texto_nuevo ) ) ); if ( ! function_exists( 'media_sideload_image' ) ) { require_once ABSPATH . 'wp-admin/includes/media.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/image.php'; } foreach ( $urls_nuevas as $url ) { if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) { continue; } if ( in_array( $url, $procesadas, true ) ) { continue; } $id_attachment = media_sideload_image( $url, $post_id, null, 'id' ); if ( ! is_wp_error( $id_attachment ) ) { $ids_actuales[] = $id_attachment; $procesadas[] = $url; } } update_post_meta( $post_id, '_mqt_ids_detalle', array_unique( $ids_actuales ) ); update_post_meta( $post_id, '_mqt_urls_detalle_procesadas', $procesadas ); } add_action( 'woocommerce_after_single_product_summary', 'mqt_mostrar_galeria_detalle', 15 ); function mqt_mostrar_galeria_detalle() { global $post; $ids = get_post_meta( $post->ID, '_mqt_ids_detalle', true ); if ( empty( $ids ) || ! is_array( $ids ) ) { return; } $items_html = ''; foreach ( $ids as $id ) { $full = wp_get_attachment_image_url( $id, 'full' ); if ( ! $full ) { continue; } $img = wp_get_attachment_image( $id, 'medium', false, array( 'loading' => 'lazy' ) ); $items_html .= '' . $img . ''; } if ( '' === $items_html ) { return; } $estilos = ''; $html = '
'; $html .= '

Detalles

'; $html .= '
' . $items_html . '
'; $html .= '
'; $html .= $estilos; echo $html; }
Utilizamos cookies propias y de terceros para mejorar tu experiencia de navegación y analizar el tráfico del sitio. Puedes aceptar todas las cookies o rechazar las no esenciales. Más información en nuestra Política de Cookies.
¿Te podemos ayudar?

Motos de Ocasión

Explora nuestro catálogo exclusivo de motocicletas revisadas. Calidad, potencia y confianza garantizada en cada unidad de Motos Exup.

CATÁLOGO

Ordenar por:

Filtros

Utilizamos cookies propias y de terceros para mejorar tu experiencia de navegación y analizar el tráfico del sitio. Puedes aceptar todas las cookies o rechazar las no esenciales. Más información en nuestra Política de Cookies.