Se trata de un A nivel de desarrollador documento. Si no está familiarizado con el código/plantillas y la resolución de posibles conflictos, póngase en contacto con un desarrollador que esté familiarizado con FooEvents y/o WooCommerce.
Importante, leer primero #
Estos fragmentos se proporcionan como cortesía y no forman parte de la oferta de productos de FooEvents. Se consideran personalizaciones y no cuentan con el soporte oficial de FooEvents. Por lo tanto, no proporcionamos soporte para fragmentos y personalizaciones de acuerdo con nuestra política de personalización. Condiciones de uso. Utilícelo bajo su propia responsabilidad.
Completar pedidos automáticamente #
Esto permite que las entradas se envíen automáticamente una vez recibido el pago, en lugar de tener que completar el pedido manualmente. Asegúrese de que los productos de su evento están configurados como "Virtual" y "Descargable"como se explica en nuestro documentación de ayudaen caso contrario, la orden no completarse automáticamente aunque se haya efectuado el pago.
Añada el siguiente código en el tema hijo funciones.php o a través de un plugin que permita añadir funciones personalizadas, como la función Fragmentos de código plugin. Evite añadir código personalizado directamente al tema principal funciones.php ya que se sobrescribirá cuando actualice el tema.
También puede cambiar el estado "Completado" por otro estado de la orden, como "Procesando".
/** * Autocompletar todos los pedidos WooCommerce. */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' ); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'completado' ); }
Mostrar el nombre y el correo electrónico del asistente en el correo electrónico de administración de la nueva orden #
Añada el siguiente fragmento de código al tema funciones.php archivo. Puede cambiar el correo electrónico que se muestra en el uso de una diferente gancho.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Datos de los asistentes</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Nombre</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Apellido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>Dirección de correo electrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />'; echo "</p>"; } } }
Mostrar todos los campos personalizados de los asistentes sin etiquetas en el correo electrónico de administración de nuevos pedidos #
Añada el siguiente fragmento de código al tema funciones.php archivo. Puede cambiar el correo electrónico que se muestra en el uso de una diferente gancho.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Datos de los asistentes</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Nombre</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Apellido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>Dirección de correo electrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />'; foreach ($ticket['WooCommerceEventsCustomAttendeeFields'] as $caf) { echo $caf.'<br />'; } echo "</p>"; } } }
Mostrar campos de asistentes personalizados con etiquetas en el correo electrónico de administración de nuevos pedidos #
Añada el siguiente fragmento de código al tema funciones.php archivo. Puede cambiar el correo electrónico que se muestra en el uso de una diferente gancho. Asegúrese de sustituir "ovsxtmynwagotamjqieq" y "ruzwhgbuhzuzzdwnnaxe" en el código de ejemplo por su código de campo de asistente personalizado específico. Puede encontrar esta información si edita un ticket y busca cada campo personalizado de asistente en la sección "Campos personalizados". Tendrá que añadir cada campo personalizado de asistente y su etiqueta individualmente.
. [php] add_action( 'woocommerce_email_customer_details', 'fooevents_display_attendee_details_in_new_order_email', 10 , 4); function fooevents_display_attendee_details_in_new_order_email($order, $sent_to_admin, $plain_text, $email){ echo "<h3>Datos de los asistentes</h3>"; $WooCommerceEventsOrderTickets = get_post_meta($order->get_id(), 'WooCommerceEventsOrderTickets', true); foreach($WooCommerceEventsOrderTickets as $event) { foreach($event as $ticket) { echo "<p>"; echo '<strong>Nombre</strong>: '.$ticket['WooCommerceEventsAttendeeName'].'<br />'; echo '<strong>Apellido</strong>: '.$ticket['WooCommerceEventsAttendeeLastName'].'<br />'; echo '<strong>Dirección de correo electrónico</strong>: '.$ticket['WooCommerceEventsAttendeeEmail'].'<br />'; echo '<strong>Cumpleaños</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ovsxtmynwagotamjqieq'].'<br />'; echo '<strong>Canción favorita</strong>: '.$ticket['WooCommerceEventsCustomAttendeeFields']['fooevents_custom_ruzwhgbuhzuzzdwnnaxe'].'<br />'; echo "</p>"; } } }
Mostrar la hora de inicio del evento en el listado de eventos #
Añada el siguiente fragmento de código al tema funciones.php archivo. Estiliza la visualización de la hora añadiendo CSS para la clase 'fooevents-date'.
Cambia la ubicación de la hora utilizando un gancho.
. [php] function fooevents_display_time_in_shop_listing() { global $post; if (is_front_page() || is_home() || is_shop() || is_product_category() || is_product_tag()) { echo '<div class="fooevents-date">'; echo get_post_meta($post->ID, 'WooCommerceEventsHour', true).':'; echo get_post_meta($post->ID, 'WooCommerceEventsMinutes', true). ' '; echo get_post_meta($post->ID, 'WooCommerceEventsPeriod', true); echo '</div>'; } } add_filter( 'woocommerce_after_shop_loop_item_title', 'fooevents_display_time_in_shop_listing', 35 );[/php]
Mostrar los asistentes inscritos en forma de tabla #
Añada el siguiente fragmento de código al tema funciones.php para mostrar todos los asistentes registrados a su evento en formato de tabla. Después de añadir el fragmento de código, puede utilizar el shortcode como este:
[fooevents_attendees]
para mostrar todos los asistentes a todos los eventos, o así:
[fooevents_attendees product_id=123]
donde "123" es el ID del evento del que desea mostrar la lista de asistentes.
function fooevents_display_attendees($attributes) { $product_id=''; if(!empty($attributes['product_id'])) { $product_id = $attributes['product_id']; } $output =''; $args = array( 'numberposts' => -1, 'posts_per_page' => -1, 'post_type' => 'event_magic_tickets', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'WooCommerceEventsProductID', 'value' => $product_id, 'compare' => 'LIKE' ) ) ); 1TP12La_consulta = new WP_Query( $args ); if( $the_query->have_posts() ): while ( $the_query->have_posts() ) : 1TP12La_consulta->el_post(); $postid = $the_query->post->ID; // salida de todos los resultados - PERSONALIZAR A SU GUSTO $output .= "<tr>"; 1TP12Salida .= "<td>".get_the_title()."</td>"; 1TP12Salida .= "<td>".get_post_meta($postid, 'WooCommerceEventsPurchaserFirstName', true)".</td>"; 1TP12Salida .= "<td>".get_post_meta($postid, 'WooCommerceEventsPurchaserLastName', true)".</td>"; 1TP12Salida .= "</tr>"; endwhile; endif; wp_reset_query(); 1TP12Salida ="<table>".1TP12Salida".</table>"; devolver $output; } add_shortcode("fooevents_attendees", "fooevents_display_attendees"); [/php]
Mostrar la fecha del evento antes del título en la página del producto #
Cambie la ubicación de la fecha utilizando un gancho.
. [php] function fooevents_display_date_on_single() { global $post; $product = wc_get_product( $post->ID ); $start_date = $product->get_meta( 'WooCommerceEventsDate' ); $end_date = $product->get_meta( 'WooCommerceEventsEndDate' ); if ( $end_date ) { printf( '<h3>%s</h3>', esc_html( 1TP12Fecha_inicio . ' - ' . 1TP12Fecha_fin ) ); } else if( 1TP12Fecha_inicio ) { printf( '<h3>%s</h3>', esc_html( 1TP12Fecha_inicial ) ); } } add_action( 'woocommerce_single_product_summary', 'fooevents_display_date_on_single' );
Si desea que la fecha del evento esté disponible como shortcode, puede añadir la siguiente línea debajo de la función:
add_shortcode( 'fooevents_date_on_single', 'fooevents_display_date_on_single');
A continuación, puede utilizar el código corto [fooevents_date_on_single]
para mostrar la fecha del evento en la página.
Sustituir el icono del asiento en el plano de asientos por una imagen diferente #
Modifica el siguiente fragmento de código CSS añadiendo la URL a una imagen diferente que quieras que sustituya a la imagen de asiento predeterminada para todos los asientos. Añade el fragmento de código modificado al archivo CSS personalizado de tu tema.
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { background-image: url(../images/seat.svg); }
Eliminar el icono del asiento en el plano de asientos para que los asientos se muestren como recuadros #
#fooevents_seating_dialog .fooevents_seating_chart_view_row span { background-image: none; }
Cambiar la dirección de los números de asiento en el plano de asientos #
#fooevents_seating_dialog .fooevents_seating_chart_view_row { display: flex; flex-direction: row-reverse; justify-content: flex-end; }
Mostrar los asientos impares a la derecha y los pares a la izquierda. #
#fooevents_seating_dialog .fooevents_seating_chart_view_row > span:nth-of-type(even) { float: left; }
Mostrar asientos en el centro del plano de asientos #
[css] #fooevents_seating_dialog .fooevents_seating_chart_view_row_name, #fooevents_seating_dialog .fooevents_seating_chart_view_row { text-align: center; } [/css]
Permitir que el plano de asientos se desplace horizontalmente en lugar de mostrar los asientos de la fila siguiente. #
Esto podría ser útil si tiene muchos asientos por fila y quiere que se muestren uno al lado del otro en lugar de en la fila siguiente si no caben en una línea.
#fooevents_seating_dialog .fooevents_seating_chart_view_row { overflow-x: scroll; white-space: nowrap; }
Mostrar una cuadrícula de calendario en ordenadores de sobremesa y una lista de semanas de calendario en móviles #
Añade dos shortcodes de calendario en la página o post donde quieras mostrar tu calendario. El primer shortcode mostrará una cuadrícula de calendario y debe tener este aspecto:
[fooevents_calendar id="escritorio"]
El segundo shortcode mostrará una lista de semanas del calendario y debe tener este aspecto:
[fooevents_calendar id="mobile" defaultView="listWeek"]
Añade el siguiente fragmento de código CSS al archivo CSS personalizado de tu tema. Asegúrese de que el valor del selector CSS ID es el mismo que el valor del atributo "id" que ha especificado en el shortcode. Puede ajustar la propiedad "max-width" al tamaño de pantalla en el que desea que se muestre la lista de semanas del calendario y se oculte la cuadrícula del calendario.
#desktop_fooevents_calendar { display: block; } #mobile_fooevents_calendar { display: none; } @media screen and (max-width: 600px) { #desktop_fooevents_calendar { display: none; } #mobile_fooevents_calendar { display: block; } }
Cambiar la posición del icono Copiar datos del comprador #
El siguiente fragmento alineará el botón de copia a la derecha de la etiqueta del primer nombre:
.fooevents-copia-del-comprador { float: right; margin-bottom:-1.7em }
Si no utiliza etiquetas, sino marcadores de entrada, utilice el siguiente fragmento de código:
.fooevents-copia-del-comprador { float: right; margin-top:-2em }
Mostrar primero la pestaña "Detalles del evento" en la página del evento #
Añada el siguiente fragmento de código al tema funciones.php archivo.
add_filter( 'woocommerce_product_tabs', 'reorder_tabs', 98 ); function reorder_tabs( $tabs ) { $tabs['woocommerce_events']['priority'] = 1; return $tabs; }
Dirigir todos los botones "Añadir a la cesta" a las páginas de productos #
Si se trata de un producto simple, por defecto, el botón "Añadir a la cesta" añadirá automáticamente un producto a la cesta del cliente. Si utiliza la extensión de reservas FooEvents, es posible que necesite que sus clientes vayan primero a la página del producto para seleccionar la fecha y la franja horaria de la reserva. El siguiente fragmento se asegurará de que cuando se haga clic en el botón "Añadir al carrito" para productos sencillos, el usuario sea dirigido a la página del producto.
add_filter( 'woocommerce_loop_add_to_cart_link', 'fooevents_modify_add_to_cart_button_url', 10, 2 ); function fooevents_modify_add_to_cart_button_url( $button, $product ) { if (is_product_category() | is_shop()) { $button_text = $product->add_to_cart_text(); $button_link = $product->get_permalink(); $button = '<a class="button" href="/es/' . $button_link . '/">' . $button_text . '</a>'; return $button; } }
Mostrar GRATIS si el precio del evento es cero (0) #
Añada el siguiente fragmento de código al tema funciones.php si desea cambiar los eventos y productos con un precio de "0" a "GRATIS". También puedes sustituir la palabra "GRATIS" por otra palabra o frase o dejarla en blanco si no quieres que se muestre nada.
add_filter( 'woocommerce_get_price_html', 'wp_price_free_zero_empty', 100, 2 ); function wp_price_free_zero_empty( $price, $product ) { if ( '' === $product->get_price() || 0 == $product->get_price() ) { $price = 'FREE'; } return $price; }
Mostrar productos y variaciones (tickets) en formato de tabla cuadriculada #
Añada el siguiente fragmento de código al tema funciones.php para mostrar los productos y variaciones en formato de tabla en la página del evento/producto en lugar de la lista desplegable por defecto. Cada opción de ticket aparecerá en una nueva fila y tendrá su propio selector de cantidad.
Tenga en cuenta lo siguiente: Este fragmento de código no es compatible con la aplicación FooEvents Asientos y FooEvents Reservas selectores de páginas de productos.
selectores de páginas de productos. [php] /** * Mostrar variaciones en un formato de tabla. */ function woocommerce_variable_add_to_cart() { global $producto, $post; // Introduzca una lista separada por comas de ID de productos que deben mostrar las variaciones en formato de tabla. Dejar vacío para mostrar todos los productos ( por ejemplo array() ) $productos = array( ); if ( in_array( $post->ID, $products ) || empty( $products ) ) { $variations = find_valid_variations(); // Comprueba si la meta especial 'price_grid' está activada, si lo está, carga la plantilla por defecto. if ( get_post_meta( $post->ID, 'price_grid', true ) ) { // Poner en cola los scripts de variación. wp_enqueue_script( 'wc-add-to-cart-variation' ); // Cargar la plantilla wc_get_template( single-product/add-to-cart/variable.php', array( 'available_variations' => $product->get_available_variations(), 'attributes' => $product->get_variation_attributes(), 'selected_attributes' => $product->get_variation_default_attributes(), ) ); return; } // ¡Genial, hagamos nuestra propia plantilla! ?> <table class="variations variations-grid" cellspacing="0"> <tbody> <?php $variation = 0; foreach ( $variations as $key => $value ) { if ( ! $value['variation_is_visible'] ) { continue; } if ( $variation != $value['variation_id'] ) { ?> <tr> <td> <?php foreach ( $value['attributes'] as $key => $val ) { $val = str_replace( array( '-', '_' ), ' ', $val ); printf( '<div class="attr attr-%s">%s</div>', $key, ucwords( $val ) ); } ?> </td> <td> <?php echo $value['price_html']; ?> </td> <?php if ( $value['is_in_stock'] ) { ?> <form class="cart" action="/es//" method="post" enctype='multipart/form-data' data-trp-original-action="<?php echo esc_url( $product->add_to_cart_url() ); ?>"> <td id="variation_<?php echo $value['variation_id']; ?>"> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%09%09%09%09%09%09%09%09%09%09jQuery(document).ready(function(%24)%7B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22step%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22value%22%2C%20%3C%3Fphp%20echo%20%24variation_group_of_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22min%22%2C%20%3C%3Fphp%20echo%20%24variation_minimum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%09%24(%20%22%23variation_%3C%3Fphp%20echo%20%24value%5B'variation_id'%5D%3B%20%3F%3E%20.qty%22%20).attr(%20%22max%22%2C%20%3C%3Fphp%20echo%20%24variation_maximum_quantity%3B%20%3F%3E%20)%3B%0A%09%09%09%09%09%09%09%09%09%09%7D)%3B%0A%09%09%09%09%09%09%09%09%09%09%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" /> <?php } ?> </td> <td> <?php if ( ! empty( $value['attributes'] ) ) { foreach ( $value['attributes'] as $attr_key => $attr_value ) { ?> <input type="hidden" name="<?php echo $attr_key; ?>" value="<?php echo $attr_value; ?>"> <?php } } ?> <button type="submit" class="single_add_to_cart_button btn btn-primary"><span class="glyphicon glyphicon-tag"></span> Añadir a la cesta</button> </td> <input type="hidden" name="variation_id" value="<?php echo $value['variation_id']; ?>" /> <input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" /> <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $post->ID ); ?>" /> <input type="hidden" name="trp-form-language" value="es"/></form> <?php } else { ?> <td colspan="2"> <p class="stock out-of-stock"><?php _e( 'This item is currently out of stock and unavailable.', 'woocommerce' ); ?></p> </td> <?php } ?> </tr> <?php $variation = $value['variation_id']; } } ?> </tbody> </table> <?php } else { // Enqueue variation scripts. wp_enqueue_script( 'wc-add-to-cart-variation' ); // Load the template wc_get_template( 'single-product/add-to-cart/variable.php', array( 'available_variations' => $product->get_available_variations(), 'attributes' => $producto->get_variation_attributes(), 'selected_attributes' => $product->get_variation_default_attributes(), ) ); return; } } function encontrar_variaciones_validas() { global $product, $post; $variations = $product->get_available_variations(); $attributes = $producto->get_attributes(); $new_variants = array(); // Recorre todas las variaciones foreach ( $variations as $variation ) { // Examina los atributos. // 1. Si ambos están explícitamente establecidos, se trata de una variación válida // 2. Si uno no está establecido, significa que ninguno, y debemos 'crear' el resto. $valid = true; // hasta ahora foreach ( $attributes as $slug => $args ) { if ( array_key_exists( "attribute_$slug", $variation['attributes'] ) && ! empty( $variation['attributes'][ "attribute_$slug" ] ) ) { // Existe } else { // No existe, crear $valid = false; // contiene 'any'. // recorre todas las opciones del atributo 'ANY' y añade cada una de ellas foreach ( explode( '|', $attributes[ $slug ]['value'] ) as $attribute ) { $attribute = trim( $attribute ); $new_variant = $variation; $new_variant['attributes'][ "attribute_$slug" ] = $attribute; $new_variants[] = $new_variant; } } } // Contiene TODOS los atributos establecidos, y es en sí misma una variación "válida". if ( $valid ) { $new_variants[] = $variation; } } return $new_variants; } [/php]
Añada soporte para horas de inicio y fin diarias a los temas de sus tickets #
A partir de la versión 1.5.5 de la FooEvents Varios días se pueden seleccionar diferentes horas de inicio y fin para cada día de una semana. evento de varios días. También se ha añadido soporte para esta función en todos los FooEvents Temas de entradas. Por favor, siga estas instrucciones para actualizar un tema de ticket existente. Si utiliza un tema de ticket personalizado y no puede sustituir el tema de ticket por la versión actualizada, añada el siguiente fragmento de código al tema de ticket para añadir compatibilidad con las horas de inicio y fin. [php]
<!-- MULTI-DAY DETAILS --> <strong><?php printf( __( '%1$s %2$d: ', 'woocommerce-events' ), $ticket['dayTerm'], $x ); ?></strong> <?php echo esc_attr( $date ); ?><br /> <br />
Sustituir los enlaces predeterminados del botón Añadir al carro de WooCommerce por enlaces de productos. #
Los botones WooCommerce Añadir a la cesta que aparecen por defecto en las páginas de anuncios de las tiendas añadirán automáticamente un producto a la cesta y redirigirán a la página de la cesta. Cuando se utiliza FooEvents Reservas, es posible que prefiera canalizar al usuario a través de la página del producto para que primero puedan hacer una selección de reserva de ranura y tiempo antes de proceder a la página del carrito. El siguiente fragmento sustituirá el enlace "Añadir al carrito" por un enlace a la página del producto. Esto garantizará que el usuario pueda realizar la selección de reserva adecuada en la página del producto antes de pasar a la página del carrito o de pago.
/** * @snippet Cambiar WooCommerce botón 'Añadir al carrito' a 'Ver producto' * @source https://www.wptechnic.com/?p=4615 * @autor Muhammad Tamzid * @compatible WC 4.3.1 */ // Cambia el botón WooCommerce 'Añadir al carrito' por 'Ver producto' add_filter( 'woocommerce_loop_add_to_cart_link', 'wpt_custom_view_product_button', 10, 2 ); function wpt_custom_view_product_button( $button, $product ) { // Ignorar para productos variables if ( $product->is_type( 'variable' ) ) { return $button; } // Texto del botón aquí $button_text = __( 'Reservar Entrada', 'woocommerce' ); return '<a class="button wpt-custom-view-product-button" href="/es/' . $product->get_permalink() . '/">' . $button_text . '</a>'; }
Mostrar la fecha del evento para eventos "únicos" en el carro y en la página de pago. #
add_filter( 'woocommerce_cart_item_name', 'add_event_date_cart_checkout', 10, 3 ); function add_event_date_cart_checkout( $product_name, $cart_item, $cart_item_key ) { $product = $cart_item['data']; if ( $value = $product->get_meta( 'WooCommerceEventsDate' ) ) { $product_name .= '' . $value . '; } return $nombre_producto; }