Le temps passe vite… Cela fait 6 mois que j’ai commencé à travailler pour WooThemes en tant que technicien support WooCommerce à plein temps. Pendant ces 6 mois j’ai beaucoup appris sur WooCommerce et j’ai beaucoup codé (lire beaucoup!) d’extraits liés à WooCommerce. En fait, WooCommerce est un outil vraiment puissant et facilement extensible. Il a de nombreux crochets qui peuvent être utilisés pour presque tout, et c’est ce qui rend WooCommerce si bon. Voici une liste d’extraits que j’ai écrits ou adaptés au cours des derniers mois; tous ces extraits doivent être collés dans le fichier functions.php de votre dossier de thème:

1 – Ajouter un type de paiement à l’e-mail de l’administrateur WooCommerce

add_action( 'woocommerce_email_after_order_table', 'add_payment_method_to_admin_new_order', 15, 2 );
 
function add_payment_method_to_admin_new_order( $order, $is_admin_email ) {
  if ( $is_admin_email ) {
    echo '<p><strong>Payment Method:</strong> ' . $order->payment_method_title . '</p>';
  }
}

2 – Up-sell des produits par page / par ligne

remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_upsells', 15 );
 
if ( ! function_exists( 'woocommerce_output_upsells' ) ) {
    function woocommerce_output_upsells() {
        woocommerce_upsell_display( 3,3 ); // Display 3 products in rows of 3
    }
}

3 – Supprimer les catégories de produits de la page de la boutique

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {
 
    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;
    
    if ( ! is_admin() && is_shop() && ! is_user_logged_in() ) {
 
        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( 'color', 'flavor', 'spices', 'vanilla' ), // Don't display products in these categories on the shop page
            'operator' => 'NOT IN'
        )));
    
    }
 
    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
 
}

4 – Traduisez rapidement n’importe quelle chaîne

add_filter('gettext',  'translate_text');
add_filter('ngettext',  'translate_text');
 
function translate_text($translated) {
     $translated = str_ireplace('Choose and option',  'Select',  $translated);
     return $translated;
}

5 – Exclure une catégorie du widget de catégorie WooCommerce

add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );

function woo_product_cat_widget_args( $cat_args ) {
    
    $cat_args['exclude'] = array('16');
    
    return $cat_args;
}

6 – Ajouter un champ personnalisé à une variante de produit

//Display Fields
add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
//JS to add fields for new variations
add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' );
//Save variation fields
add_action( 'woocommerce_process_product_meta_variable', 'variable_fields_process', 10, 1 );

function variable_fields( $loop, $variation_data ) { ?>  
    <tr>
        <td>
            <div>
                    <label></label>
                    <input type="text" size="5" name="my_custom_field[]" value=""/>
            </div>
        </td>
    </tr>

<tr>
        <td>
            <div>
                    <label></label>
                    
            </div>
        </td>
    </tr>
<?php }
 
function variable_fields_process( $post_id ) {
    if (isset( $_POST['variable_sku'] ) ) :
        $variable_sku = $_POST['variable_sku'];
        $variable_post_id = $_POST['variable_post_id'];
        $variable_custom_field = $_POST['my_custom_field'];
        for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
            $variation_id = (int) $variable_post_id[$i];
            if ( isset( $variable_custom_field[$i] ) ) {
                update_post_meta( $variation_id, '_my_custom_field', stripslashes( $variable_custom_field[$i] ) );
            }
        endfor;
    endif;
}

7 – Remplacer «Rupture de stock» par «Vendu»

add_filter('woocommerce_get_availability', 'availability_filter_func');

function availability_filter_func($availability)
{
    $availability['availability'] = str_ireplace('Out of stock', 'Sold', $availability['availability']);
    return $availability;
}

8 – Afficher “produit déjà dans le panier” au lieu du bouton “ajouter au panier”

/**
 * Change the add to cart text on single product pages
 */
add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );

function woo_custom_cart_button_text() {

    global $woocommerce;
    
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
    
        if( get_the_ID() == $_product->id ) {
            return __('Already in cart - Add Again?', 'woocommerce');
        }
    }
    
    return __('Add to cart', 'woocommerce');
}

/**
 * Change the add to cart text on product archives
 */
add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );

function woo_archive_custom_cart_button_text() {

    global $woocommerce;
    
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
    
        if( get_the_ID() == $_product->id ) {
            return __('Already in cart', 'woocommerce');
        }
    }
    
    return __('Add to cart', 'woocommerce');
}

9 – Masquer le nombre de produits dans la vue des catégories

add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );

function woo_remove_category_products_count() {
    return;
}

10 – Rendre les champs de paiement obligatoires

add_filter( 'woocommerce_checkout_fields', 'woo_filter_account_checkout_fields' );
 
function woo_filter_account_checkout_fields( $fields ) {
    $fields['account']['account_username']['required'] = true;
    $fields['account']['account_password']['required'] = true;
    $fields['account']['account_password-2']['required'] = true;

    return $fields;
}

11 – Renommer un onglet de produit

add_filter( 'woocommerce_product_tabs', 'woo_rename_tab', 98);
function woo_rename_tab($tabs) {

 $tabs['description']['title'] = 'More info';

 return $tabs;
}

12 – Liste des catégories de produits WooCommerce

$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
    'include'    => $ids
);

$product_categories = get_terms( 'product_cat', $args );

$count = count($product_categories);
 if ( $count > 0 ){
     echo "<ul>";
     foreach ( $product_categories as $product_category ) {
       echo '<li><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</li>';
        
     }
     echo "</ul>";
 }

13 – Remplacer le titre de la page de la boutique

add_filter( 'woocommerce_page_title', 'woo_shop_page_title');

function woo_shop_page_title( $page_title ) {
    
    if( 'Shop' == $page_title) {
        return "My new title";
    }
}

14 – Changer le titre d’un widget

/*
 * Change widget title
 */
add_filter( 'widget_title', 'woo_widget_title', 10, 3);

function woo_widget_title( $title, $instance, $id_base ) {
    
    if( 'onsale' == $id_base) {
        return "My new title";
    }
}

15 – Supprimer les paramètres par défaut de WooCommerce

add_filter( 'woocommerce_catalog_settings', 'woo_remove_catalog_options' );

function woo_remove_catalog_options( $catalog ) {

    unset($catalog[23]); //Trim zeros (no) 
    unset($catalog[22]); //2 decimals 
    unset($catalog[21]); //decimal sep (.) 
    unset($catalog[20]); //thousand sep (,) 
    unset($catalog[19]); //currency position (left) 
    unset($catalog[18]); //currency position (left) 
    unset($catalog[5]); // ajax add to cart (no)    
    
    return $catalog; 
}

16 – Modifier l’adresse e-mail «de»

function woo_custom_wp_mail_from() {
        global $woocommerce;
        return html_entity_decode( '[email protected]' );
}
add_filter( 'wp_mail_from', 'woo_custom_wp_mail_from', 99 );

17 – Décoder à partir du nom dans l’email WooCommerce

function woo_custom_wp_mail_from_name() {
        global $woocommerce;
        return html_entity_decode( get_option( 'woocommerce_email_from_name' ) );
}
add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );

function woo_custom_wp_mail_from() {
        global $woocommerce;
        return html_entity_decode( get_option( 'woocommerce_email_from' ) );
}
add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );

18 – Retour des identifiants des produits phares

function woo_get_featured_product_ids() {
    // Load from cache
    $featured_product_ids = get_transient( 'wc_featured_products' );

    // Valid cache found
    if ( false !== $featured_product_ids )
        return $featured_product_ids;

    $featured = get_posts( array(
        'post_type'      => array( 'product', 'product_variation' ),
        'posts_per_page' => -1,
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'       => '_visibility',
                'value'     => array('catalog', 'visible'),
                'compare'   => 'IN'
            ),
            array(
                'key'   => '_featured',
                'value' => 'yes'
            )
        ),
        'fields' => 'id=>parent'
    ) );

    $product_ids = array_keys( $featured );
    $parent_ids  = array_values( $featured );
    $featured_product_ids = array_unique( array_merge( $product_ids, $parent_ids ) );

    set_transient( 'wc_featured_products', $featured_product_ids );

    return $featured_product_ids;
}

19 – Ajouter un champ personnalisé pour modifier la page d’adresse

// add fields to edit address page
function woo_add_edit_address_fields( $fields ) {

    $new_fields = array(
                'date_of_birth'     => array(
                'label'             => __( 'Date of birth', 'woocommerce' ),
                'required'          => false,
                'class'             => array( 'form-row' ),
            ),
        );
        
    $fields = array_merge( $fields, $new_fields );
    
    return $fields;
    
}

add_filter( 'woocommerce_default_address_fields', 'woo_add_edit_address_fields' );

20 – Afficher le shortcode du catalogue des produits en vente

function woocommerce_sale_products( $atts ) {

    global $woocommerce_loop;

    extract(shortcode_atts(array(
        'per_page'  => '12',
        'columns'   => '4',
        'orderby' => 'date',
        'order' => 'desc'
    ), $atts));

    $woocommerce_loop['columns'] = $columns;

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => $per_page,
        'orderby' => $orderby,
        'order' => $order,
        'meta_query' => array(
            array(
                'key' => '_visibility',
                'value' => array('catalog', 'visible'),
                'compare' => 'IN'
            ),
            array(
                'key' => '_sale_price',
                'value' =>  0,
                'compare'   => '>',
                'type'      => 'NUMERIC'
            )
        )
    );
    query_posts($args);
    ob_start();
    woocommerce_get_template_part( 'loop', 'shop' );
    wp_reset_query();

    return ob_get_clean();
}

add_shortcode('sale_products', 'woocommerce_sale_products');

21 – Avoir des produits en vente

function woo_have_onsale_products() {
    
    global $woocommerce;

    // Get products on sale
    $product_ids_on_sale = array_filter( woocommerce_get_product_ids_on_sale() );

    if( !empty( $product_ids_on_sale ) ) {
        return true;
    } else {
        return false;
    }
    
}

// Example:
if( woo_have_onsale_products() ) {
    echo 'have onsale products';
} else {
    echo 'no onsale product';
}

22 – Définir le montant minimum de la commande

add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
    global $woocommerce;
    $minimum = 50;
    if ( $woocommerce->cart->get_cart_total(); < $minimum ) {
           $woocommerce->add_error( sprintf( 'You must have an order with a minimum of %s to place your order.' , $minimum ) );
    }
}

23 – Trier par prix, date ou titre sur la page boutique

add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');
 
function custom_default_catalog_orderby() {
     return 'date'; // Can also use title and price
}

24 – Rediriger le bouton Ajouter au panier vers la page de paiement

add_filter ('add_to_cart_redirect', 'redirect_to_checkout');

function redirect_to_checkout() {
    global $woocommerce;
    $checkout_url = $woocommerce->cart->get_checkout_url();
    return $checkout_url;
}

25 – Ajouter un destinataire de courrier électronique une fois la commande terminée

function woo_extra_email_recipient($recipient, $object) {
    $recipient = $recipient . ', [email protected]';
    return $recipient;
}
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'woo_extra_email_recipient', 10, 2);

Et c’est tout! J’espère que vous trouverez ces extraits utiles, ils ont tous été testés et ils fonctionnent tous très bien, mais si vous rencontrez des problèmes, veuillez me le faire savoir dans la section des commentaires. S’amuser! 😉

Share: