Temas

⌘K
  1. Temas
  2. Fragmentos de código

Fragmentos de código

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-&gt;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-&gt;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-&gt;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-&gt;ID, 'WooCommerceEventsHour', true).':';
echo get_post_meta($post-&gt;ID, 'WooCommerceEventsMinutes', true). ' ';
echo get_post_meta($post-&gt;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' =&gt; -1,
    'posts_per_page' =&gt; -1,
    'post_type' =&gt; 'event_magic_tickets',
    'meta_query' =&gt; array(
      'relation' =&gt; 'OR',
      array(
        'key' =&gt; 'WooCommerceEventsProductID',
        'value' =&gt; $product_id,
        'compare' =&gt; 'LIKE'
      )
    )
  );

   1TP12La_consulta = new WP_Query( $args );

  if( $the_query-&gt;have_posts() ):
    while ( $the_query-&gt;have_posts() ) : 1TP12La_consulta-&gt;el_post();
    $postid = $the_query-&gt;post-&gt;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-&gt;ID );
  $start_date = $product-&gt;get_meta( 'WooCommerceEventsDate' );
  $end_date = $product-&gt;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-&gt;add_to_cart_text();
        $button_link = $product-&gt;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 es incompatible con la directiva FooEvents Asientos y el Mostrar las opciones de asiento en las páginas de productos opción. Debería funcionar con los eventos de Aforo si sólo muestra el Gráfico de Aforo en la página de Pago.

/** Add your event IDs in array like this
 * if you only want certain events
 * to display variations in a table: 
 * array( 123, 456 ) 
 */
$products              = array(  );
$products_multi_button = array(  );

/**
 * Add multiple variations with quantities at once in add to cart url using notation "<product_id or variation_id>:<product_quantity>,..."
 */
function fooevents_add_multiple_products_to_cart( $url = false ) {

    if ( ! empty( $_GET['add-to-cart'] ) ) {

        // Make sure WC is installed and add-to-cart query arg exists
        if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) ) {
            return;
        }

        // Remove WooCommerce's hook since it doesn't handle multiple products/variations
        remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );

        $product_ids = explode( ',', $_REQUEST['add-to-cart'] );
        $count       = count( $product_ids );
        $number      = 0;

        foreach ( $product_ids as $id_and_quantity ) {

            if ( ! empty( $_GET['fooevents_bookings_method'] ) ) {
                $_POST['fooevents_bookings_method'] = $_GET['fooevents_bookings_method'];
            } else {
                $_POST['fooevents_bookings_method'] = 'slotdate';
            }

            if ( ! empty( $_GET['bookings_sid'] ) ) {
                $_POST['fooevents_bookings_slot_val__trans'] = $_GET['bookings_sid'];
            }

            if ( ! empty( $_GET['bookings_did'] ) ) {
                $_POST['fooevents_bookings_date_val__trans'] = $_GET['bookings_did'];
            }

            if ( ! empty( $_GET['bookings_slot_date'] ) ) {
                $_POST['fooevents_bookings_slot_date_val_trans'] = $_GET['bookings_slot_date'];
            }

            // Check for quantities defined in notation (<product_id or variation_id>:<product_quantity>)

            $id_and_quantity = explode( ':', $id_and_quantity );
            $product_id      = $id_and_quantity[0];

            $_REQUEST['quantity'] = ! empty( $id_and_quantity[1] ) ? absint( $id_and_quantity[1] ) : 1;

            if ( ++$number === $count ) {
                // Send back to WooCommerce's add_to_cart_action method for handling.
                $_REQUEST['add-to-cart'] = $product_id;
                return WC_Form_Handler::add_to_cart_action( $url );
            }

            $product_id        = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
            $was_added_to_cart = false;
            $adding_to_cart    = wc_get_product( $product_id );

            if ( ! $adding_to_cart ) {
                continue;
            }

            $add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->get_type(), $adding_to_cart );

            // Variable product handling
            if ( 'variable' === $add_to_cart_handler ) {
                fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_variable', $product_id );

                // Grouped Products
            } elseif ( 'grouped' === $add_to_cart_handler ) {
                fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_grouped', $product_id );

                // Custom Handler
            } elseif ( has_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler ) ) {
                do_action( 'woocommerce_add_to_cart_handler_' . $add_to_cart_handler, $url );

                // Simple Products
            } else {
                fooevents_invoke_multiple_adds( 'WC_Form_Handler', 'add_to_cart_handler_simple', $product_id );
            }
        }
    }
}

add_action( 'wp_loaded', 'fooevents_add_multiple_products_to_cart', 15 );

function fooevents_invoke_multiple_adds( $class_name, $methodName ) {
    if ( version_compare( phpversion(), '5.3', '<' ) ) {
        throw new Exception( 'PHP version does not support ReflectionClass::setAccessible()', __LINE__ );
    }

    $args = func_get_args();
    unset( $args[0], $args[1] );
    $reflection = new ReflectionClass( $class_name );
    $method     = $reflection->getMethod( $methodName );
    $method->setAccessible( true );

    $args = array_merge( array( $reflection ), $args );
    return call_user_func_array( array( $method, 'invoke' ), $args );
}




/**
 * Display variations in a table format.
 */

function woocommerce_variable_add_to_cart() {

    global $product, $post, $products, $products_multi_button;

    $woocommerce_events_type = get_post_meta( $post->ID, 'WooCommerceEventsType', true );

    // Comma separated list of product ID's that should display variations in table format. Leave empty to display all products ( e.g array() )

    if ( in_array( $post->ID, $products ) || empty( $products ) ) {

        // Set default in each input box to 0 instead of 1
        add_filter( 'woocommerce_quantity_input_args', 'fooevents_quantity_input_default', 10, 2 );

        $variations = find_valid_variations();

        // Check if the special 'price_grid' meta is set, if it is, load the default template.
        if ( get_post_meta( $post->ID, 'price_grid', true ) ) {

            // 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'           => $product->get_variation_attributes(),
                    'selected_attributes'  => $product->get_variation_default_attributes(),
                )
            );

            return;
        }

        // Custom template
        ?>
        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20JavaScript%20to%20build%20add%20to%20cart%20link%20based%20on%20quantity%20inputs%20and%20booking%20slots%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20is_bookable%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20jQuery(document).ready(function%20()%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20link_original%20%3D%20jQuery(%22%23add_to_cart_link%22).attr('data-href')%20%2B%20%22%3Fadd-to-cart%3D%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20link%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Check%20if%20booking%20slots%20should%20show%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(%20jQuery(%20%22%23fooevents_bookings_slot_val__trans%22%20).length%20%7C%7C%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).length%20)%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20booking_settings_link%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_sid%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_did%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_method%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bookings_slot_date%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20is_bookable%20%3D%20true%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_sid%20%3D%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_did%20%3D%20jQuery(%22%23fooevents_bookings_date_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_method%20%3D%20jQuery(%22%23fooevents_bookings_method%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_slot_date%20%3D%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_sid%20%3D%20jQuery(%22%23fooevents_bookings_slot_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_date_val__trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_did%20%3D%20jQuery(%22%23fooevents_bookings_date_val__trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bookings_slot_date%20%3D%20jQuery(%22%23fooevents_bookings_slot_date_val_trans%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22.quantity%20input%22).change(function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link%20%3D%20link_original%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20no_quantity%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22.variations%20tr%22).each(function()%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20var_id%20%3D%20jQuery(this).find(%22input%5Bname%3Dvariation_id%5D%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20total%20%3D%20jQuery(this).find(%22.quantity%20input%22).val()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(total%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20no_quantity%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link%20%2B%3D%20var_id%20%2B%20%22%3A%22%20%2B%20total%20%2B%20%22%2C%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(no_quantity%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).removeAttr('href')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateLink(link%2Cbookings_sid%2Cbookings_did%2Cbookings_method%2Cbookings_slot_date)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20function%20updateLink(link%2Cbookings_sid%3D%22%22%2Cbookings_did%3D%22%22%2Cbookings_method%3D%22%22%2Cbookings_slot_date%3D%22%22)%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(is_bookable)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(bookings_sid%20!%3D%20%22%22%20%26%26%20bookings_did%20!%3D%20%22%22%20%26%26%20bookings_sid%20!%3D%20undefined%20%26%26%20bookings_did%20!%3D%20undefined)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1)%20%2B%20%22%26bookings_sid%3D%22%20%2B%20bookings_sid%20%2B%20%22%26bookings_did%3D%22%20%2B%20bookings_did%20%2B%20%22%26fooevents_bookings_method%3D%22%20%2B%20bookings_method)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%09%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(bookings_slot_date%20!%3D%20%22%22%20%26%26%20bookings_slot_date%20!%3D%20undefined)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1)%20%2B%20%22%26fooevents_bookings_method%3D%22%20%2B%20bookings_method%20%2B%20%22%26bookings_slot_date%3D%22%20%2B%20bookings_slot_date)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%09%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('data-href'%2C%20link.slice(0%2C-1))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20jQuery(%22%23add_to_cart_link%22).attr('href'%2C%20jQuery(%22%23add_to_cart_link%22).attr('data-href'))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
        <form class="cart"  action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'>
            <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'] ) {

                    if ( in_array( $post->ID, $products_multi_button ) ) {

                        ?>

                    <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="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'>
                                <td id="variation_<?php echo $value['variation_id']; ?>">
                                    <?php woocommerce_quantity_input(); ?>
                                    <?php
                                    $variation_minimum_quantity  = get_post_meta( $value['variation_id'], 'variation_minimum_allowed_quantity', true );
                                    $variation_maximum_quantity  = get_post_meta( $value['variation_id'], 'variation_maximum_allowed_quantity', true );
                                    $variation_group_of_quantity = get_post_meta( $value['variation_id'], 'variation_group_of_quantity', true );
                                    ?>
                                    <?php if ( isset( $variation_group_of_quantity ) ) { ?>
                                        <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="&lt;script&gt;" title="&lt;script&gt;" />                                  
                                    <?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> Add to cart</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 ); ?>" />
                            </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
                    } else {
                        ?>


                    
                    <tr>
                        <td style="display:table-cell">
                        <?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 style="display:table-cell">
                        <?php echo $value['price_html']; ?>
                        </td>

                        <?php if ( $value['is_in_stock'] ) { ?>

                                <td id="variation_<?php echo $value['variation_id']; ?>" style="display:table-cell">
                                    <?php woocommerce_quantity_input(); ?>
                                    <?php
                                    $variation_minimum_quantity  = get_post_meta( $value['variation_id'], 'variation_minimum_allowed_quantity', true );
                                    $variation_maximum_quantity  = get_post_meta( $value['variation_id'], 'variation_maximum_allowed_quantity', true );
                                    $variation_group_of_quantity = get_post_meta( $value['variation_id'], 'variation_group_of_quantity', true );
                                    ?>
                                    <?php if ( isset( $variation_group_of_quantity ) ) { ?>
                                        <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="&lt;script&gt;" title="&lt;script&gt;" />
                                    <?php } ?>
                                </td>
                                <td style="display:table-cell">
                                    <?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
                                        }
                                    }
                                    ?>

                                </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 ); ?>" />
                            </form>
                            <?php } else { ?>
                                <td colspan="2" style="display:table-cell">
                                    <p class="stock out-of-stock"><?php _e( 'This item is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
                                </td>
                            <?php } ?>
                    </tr>
                                                <?php } ?>
                    <?php
                    $variation = $value['variation_id'];
                }
            }
            ?>
        
        </tbody>
        
            </table> 
            <?php
            if ( ! in_array( $post->ID, $products_multi_button ) ) {
                ?>
                <?php do_action( 'fooevents_output_booking_details' ); ?>
            <p class="form-row">
            <a id="add_to_cart_link" data-href="<?php echo esc_url( $product->add_to_cart_url() ); ?>" type="submit" class="single_add_to_cart_button btn btn-primary button alt wp-element-button"><span class="glyphicon glyphicon-tag"></span> Add to cart</a>
            </p>
            <?php } ?>
            </form>

        <?php
    } else {

        // Enqueue variation scripts.
        wp_enqueue_script( 'wc-add-to-cart-variation' );

        // Get Available variations?
        $get_variations = count( $product->get_children() ) <= apply_filters( 'woocommerce_ajax_variation_threshold', 30, $product );

        // Load the template.
        wc_get_template(
            'single-product/add-to-cart/variable.php',
            array(
                'available_variations' => $get_variations ? $product->get_available_variations() : false,
                'attributes'           => $product->get_variation_attributes(),
                'selected_attributes'  => $product->get_default_attributes(),
            )
        );

    }
}

function find_valid_variations() {
    global $product, $post;

    $variations   = $product->get_available_variations();
    $attributes   = $product->get_attributes();
    $new_variants = array();

    // Loop through all variations
    foreach ( $variations as $variation ) {

        // Peruse the attributes.

        // 1. If both are explicitly set, this is a valid variation
        // 2. If one is not set, that means any, and we must 'create' the rest.

        $valid = true; // so far
        foreach ( $attributes as $slug => $args ) {
            if ( array_key_exists( "attribute_$slug", $variation['attributes'] ) && ! empty( $variation['attributes'][ "attribute_$slug" ] ) ) {
                // Exists

            } else {
                // Not exists, create
                $valid = false; // it contains 'anys'
                // loop through all options for the 'ANY' attribute, and add each
                foreach ( explode( '|', $attributes[ $slug ]['value'] ) as $attribute ) {
                    $attribute                                      = trim( $attribute );
                    $new_variant                                    = $variation;
                    $new_variant['attributes'][ "attribute_$slug" ] = $attribute;
                    $new_variants[]                                 = $new_variant;
                }
            }
        }

        // This contains ALL set attributes, and is itself a 'valid' variation.
        if ( $valid ) {

            $new_variants[] = $variation;
        }
    }

    return $new_variants;
}

function fooevents_quantity_input_default( $args, $product ) {
    $args['input_value'] = 0;
    return $args;
}


/**
 * Adds booking slot dropdowns only to single product page if the event is "Bookable"
 */
function fooevents_add_booking_slots() {
    global $post, $products;
    $wc_product              = wc_get_product( $post->ID );
    $woocommerce_events_type = get_post_meta( $post->ID, 'WooCommerceEventsType', true );

    if ( is_plugin_active( 'fooevents_bookings/fooevents-bookings.php' ) || is_plugin_active_for_network( 'fooevents_bookings/fooevents-bookings.php' ) ) {

        if ( is_product() && $woocommerce_events_type == 'bookings' && ( in_array( $post->ID, $products ) || empty( $products ) ) && $wc_product->is_type( 'variable' ) ) {
            $fooevents_bookings = new Fooevents_Bookings();
            add_action( 'fooevents_output_booking_details', array( $fooevents_bookings, 'output_booking_fields_product' ) );
        }
    }
}
add_action( 'wp', 'fooevents_add_booking_slots' );

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 />

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-&gt;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;
}

Artículos

Etiquetas , , , , , , , , , , , , , , , , , , ,