info@creativaonline.es

Colección de Snippets para WooCommerce

Colección de Snippets para WooCommerce 2024

Para el correcto funcionamiento de los snippets os aconsejamos ponerlos en el fichero functions.php de vuestro tema hijo.

/* Añadir desplegable para filtrar productos destacados */

add_action('restrict_manage_posts', 'featured_products_sorting');
function featured_products_sorting() {
    global $typenow;
    $post_type = 'product'; // puedes cambiar esto si es para otro tipo de contenido
    $taxonomy  = 'product_visibility'; // cambiar a tu taxonomía
    if ($typenow == $post_type) {
        $selected      = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $info_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' => __("Mostrar todas las {$info_taxonomy->label}"),
            'taxonomy'        => $taxonomy,
            'name'            => $taxonomy,
            'orderby'         => 'name',
            'selected'        => $selected,
            'show_count'      => true,
            'hide_empty'      => true,
        ));
    };
}
add_filter('parse_query', 'featured_products_sorting_query');
function featured_products_sorting_query($query) {
    global $pagenow;
    $post_type = 'product'; // puedes cambiar esto si es para otro tipo de contenido
    $taxonomy  = 'product_visibility'; // cambiar a tu taxonomía
    $q_vars    = &$query->query_vars;
    if ( $pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }
}

/*Editar el nombre en mi cuenta a «Mis direcciones»*/

add_filter ( 'woocommerce_account_menu_items', 'rename_editaddress' );
function rename_editaddress( $menu_links ){
	
	$menu_links['edit-address'] = 'Mis direcciones';
	return $menu_links;
}

/*Ocultar métodos de envío si existe método de envío gratis»*/

add_filter( 'woocommerce_package_rates', 'oaf_unset_shipping_when_free_is_available_all_zones', 10, 2 );
   
function oaf_unset_shipping_when_free_is_available_all_zones( $rates, $package ) {
      
  $all_free_rates = array();
     
  foreach ( $rates as $rate_id => $rate ) {
    if ( 'free_shipping' === $rate->method_id ) {
       $all_free_rates[ $rate_id ] = $rate;
       break;
    }
  }
     
  if ( empty( $all_free_rates )) {
    return $rates;
  } else {
    return $all_free_rates;
  } 
 
}

/*Modificar tamaño encabezados de productos de h2 a h3″*/

if ( ! function_exists( 'woocommerce_template_loop_product_title' ) ) {
	function woocommerce_template_loop_product_title() {
		echo '<h3 class="woocommerce-loop-product__title">' . get_the_title() . '</h3>';
	}
}

/*Permite editar un pedido en varios estados del pedido»*/

add_filter( 'wc_order_is_editable', 'creativa_modificar_pedido_estados', 9999, 2 );

function creativa_modificar_pedido_estados( $allow_edit, $order ) {
    $editable_statuses = array('processing', 'completed', 'cancelled');

    if ( in_array( $order->get_status(), $editable_statuses ) ) {
        $allow_edit = true;
    }

    return $allow_edit;
}

/*Permite quitar la lupa en las imágenes de los productos de Woocommerce»*/

add_action ('woocommerce_init', function () {
    remove_theme_support ('wc-product-gallery-zoom');
});

function remove_wc_gallery_lightbox() {
    remove_theme_support( 'wc-product-gallery-lightbox' );
}
add_action( 'after_setup_theme', 'remove_wc_gallery_lightbox', 100 );

/*Permite añadir en el correo de confirmación de compra un enlace a las reseñas de Google»*/

add_filter ('woocommerce_email_order_details', 'add_google_review_link_to_email', 20, 4);
function add_google_review_link_to_email($order, $sent_to_admin, $plain_text, $email) {
    $linkreview = 'https://g.page/r/CdQZ3dhos_OzEss/review';
    if ($email->id == 'customer_completed_order') {
        echo '<h2>¿Nos dejas una reseña?</h2>';
        echo '<p>Tu opinión es muy importante para nosotros y para otros clientes. Nos encantaría que compartieras tu experiencia.</p>';
        echo '<a href="' . $linkreview . '" style="background-color: #0073aa; color: #ffffff; padding: 10px; text-decoration: none;">Dejar una reseña</a>';
    }
}

/*Poner botón «Repetir Pedido» en la tabla de pedidos en Mi Cuenta*/

add_action( 'woocommerce_my_account_my_orders_actions', 'repetir_pedido_button', 10, 2 );
function repetir_pedido_button( $actions, $order ) {
    $actions['repetir_pedido'] = array(
        'url'  => wp_nonce_url( add_query_arg( 'order_id', $order->get_id(), site_url( '/repetir-pedido' ) ), 'repetir_pedido_action', 'repetir_pedido_nonce' ),
        'name' => __('Repetir Pedido', 'woocommerce')
    );
    return $actions;
}

// Procesar la repetición del pedido cuando se hace clic en el botón
add_action( 'init', 'process_repetir_pedido' );
function process_repetir_pedido() {
    if( isset( $_GET['repetir_pedido_nonce'] ) && wp_verify_nonce( $_GET['repetir_pedido_nonce'], 'repetir_pedido_action' ) ) {
        $order_id = isset( $_GET['order_id'] ) ? absint( $_GET['order_id'] ) : 0;
        if( $order_id > 0 ) {
            $order = wc_get_order( $order_id );
            if( $order ) {
                // Vaciar el carrito actual
                WC()->cart->empty_cart();

                // Repetir el pedido
                foreach( $order->get_items() as $item ) {
                    $product_id = $item->get_product_id();
                    $quantity   = $item->get_quantity();
                    WC()->cart->add_to_cart( $product_id, $quantity );
                }

                // Redirigir al carrito
                wp_redirect( wc_get_cart_url() );
                exit;
            }
        }
    }
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *