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