Mu-plugin pour afficher le poids du produit dans le tableau de bord WooCommerce (Créer un compte)

  • WordPress :6.4
  • Statut : hors support
6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • #2476046
    Broussaille
    Participant
    Chevalier WordPress
    356 contributions

    Bonjour,

    Ma configuration WP actuelle :
    – Version de WordPress : 6.5.5
    – Version de PHP / MySQL : 8.2.20 / 10.6.18
    – Thème utilisé : Blocksy Child (slug : blocksy-child)
    – Thème parent : Blocksy (slug : blocksy)
    – Thème URI : https://creativethemes.com/blocksy/
    – Extensions activées : Advanced Editor Tools (5.9.2), Blocksy Companion (2.0.57), Boxtal Connect (1.2.22), everwpvisitcounter (1.2.3), Forminator (1.32), Imagify (2.2.2), Infosite (6), Lightbox with PhotoSwipe (5.2.6), Local Google Fonts (0.22.0), Media Library Organizer (1.6.4), SecuPress Pro — WordPress Security (2.2.5.3), SEOKEY Pro (1.8.5), WooCommerce (9.0.2), WooCommerce.com Update Manager (1.0.3), WooCommerce PayPal Payments (2.8.1), WooCommerce Stripe Gateway (8.4.0), WP Mail SMTP (4.0.1), WP Rocket (3.16.2.1)
    – Adresse du site : https://broussaillestore.fr
    – Hébergeur : o2switch

    Problème(s) rencontré(s) : Pas de problème, une solution. Ayant des soucis avec merchant center sur les poids de produits je suis obligé de faire les corrections de poids une à une. A priori merchant center a souvent un souci avec les produits variables (et avec des « simples » aussi… d’ailleurs…). Donc pour pouvoir faire ces corrections sans ouvrir chaque fois la fiche produit j’ai installé ça :

    <?php
    /*
    Plugin Name: Custom Product Weight Column
    Description: Ajoute une colonne de poids dans le tableau de bord des produits WooCommerce.
    Author: Votre Nom
    Version: 1.1
    */

    // Ajouter une nouvelle colonne pour le poids des produits
    add_filter('manage_edit-product_columns', 'add_product_weight_column', 15);
    function add_product_weight_column($columns) {
    $new_columns = array();

    foreach ($columns as $key => $column) {
    $new_columns[$key] = $column;
    if ('sku' === $key) { // Ajouter la nouvelle colonne après la colonne SKU
    $new_columns['product_weight'] = __('Poids', 'your-textdomain');
    }
    }

    return $new_columns;
    }

    // Afficher le poids des produits dans la nouvelle colonne
    add_action('manage_product_posts_custom_column', 'show_product_weight_column', 10, 2);
    function show_product_weight_column($column, $post_id) {
    if ('product_weight' === $column) {
    $product = wc_get_product($post_id);

    if ($product->is_type('variable')) {
    $weights = array();
    foreach ($product->get_children() as $variation_id) {
    $variation = wc_get_product($variation_id);
    $weight = $variation->get_weight();
    if ($weight) {
    $weights[] = $weight;
    }
    }

    if (!empty($weights)) {
    $min_weight = min($weights);
    $max_weight = max($weights);
    if ($min_weight == $max_weight) {
    echo esc_html($min_weight . ' ' . get_option('woocommerce_weight_unit'));
    } else {
    echo esc_html($min_weight . ' - ' . $max_weight . ' ' . get_option('woocommerce_weight_unit'));
    }
    } else {
    echo __('N/A', 'your-textdomain');
    }
    } else {
    $weight = $product->get_weight();
    echo $weight ? esc_html($weight . ' ' . get_option('woocommerce_weight_unit')) : __('N/A', 'your-textdomain');
    }
    }
    }

    // Rendre la colonne triable
    add_filter('manage_edit-product_sortable_columns', 'sortable_product_weight_column');
    function sortable_product_weight_column($columns) {
    $columns['product_weight'] = 'product_weight';
    return $columns;
    }

    // Gérer le tri de la colonne
    add_action('pre_get_posts', 'product_weight_column_orderby');
    function product_weight_column_orderby($query) {
    if (!is_admin()) {
    return;
    }

    $orderby = $query->get('orderby');

    if ('product_weight' === $orderby) {
    $query->set('meta_key', '_weight');
    $query->set('orderby', 'meta_value_num');
    }
    }
    custom-product-weight-column.php

    Ça permet d’avoir tous les poids « sous les yeux », pour les produits simples, comme pour les variables.

    J’ai installé ça dans un mu-plugin, dans un fichier nommé comme le titre du code.

    Ça fonctionne très bien…. Voili, voilou, si ça intéresse quelqu’un…

    Ce n’est peut-être pas LA solution, mais ça fait gagner du temps quand il faut avoir les poids…

    Après… il y a peut-être plus simple pour régler les problèmes de ce genre dans merchant center, mais j’avoue que j’en ai un peu marre de tourner en rond avec le support…

    Donc… mettons les mains dans le cambouis…

    Bonne journée.

    • Ce sujet a été modifié il y a 1 semaine et 3 jours par Joss47. Raison : Je déplace car je ne pense pas que cela a vocation à rester dans le forum d'aide de woocommerce
    • Ce sujet a été modifié le il y a 1 semaine et 3 jours par Joss47.
    • Ce sujet a été modifié le il y a 3 jours et 21 heures par Broussaille.
    #2476436
    Broussaille
    Participant
    Chevalier WordPress
    356 contributions

    Bonjour à toutes et tous. Merci Joss47 pour avoir déplacé le sujet. Je pensais que c’était plutôt du Woocommerce, mais je comprends la logique.

    J’en profite pour ajouter un autre mu-plugin qui permet d’ajouter différentes colonnes dans le tableau de bord afin d’avoir des renseignements divers : les identifiants pour les ID d’articles, pour les IDs des pages, des catégories d’articles et des images. Chaque colonne est triable (par ordre de « n° » ascendant ou descendant), large de 250px (le minimum à peu près pour des IDs à 7 ou 8 chiffres), avec le texte (IDs) centré. Elle peut être affichée ou masquée comme n’importe quelle colonne du tableau de bord. Ce mu-plugin donne aussi la possibilité de retrouver un identifiant (c’est pas mal quand on a fait des modifications de style sur un article ou une page, et que l’on ne sait plus sur quel truc…)

    Par ailleurs il y a aussi possibilité d’activer le support des catégories pour les pages.

    Et aussi une colonne pour les images de produits woocommerce dans le tableau de bord des commandes.

    Bon tout ça est créé par ChatGPT, je sais que tout le monde n’est peut-être pas d’accord avec son utilisation. Donc si ça pose problème… les modos savent quoi faire de ce post (mais s’il est supprimé, j’aimerais savoir pourquoi…). Et s’il ne faut plus que j’en poste, ben… idem

    <?php
    /*
    Plugin Name: Custom Admin Columns
    Description: Adds custom columns to various admin tables in WordPress and allows searching by ID.
    Author: Jean-Pierre Bourdet (chatGPT)
    Version: 1.0
    */

    if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
    }

    // Ajouter une nouvelle colonne pour les IDs des articles
    function add_post_id_column($columns) {
    $columns['post_id_clmn'] = __('ID', 'textdomain');
    return $columns;
    }
    add_filter('manage_posts_columns', 'add_post_id_column');

    // Afficher le contenu de la colonne ID pour les articles
    function display_post_id_column_content($column, $post_id) {
    if ($column === 'post_id_clmn') {
    echo $post_id;
    }
    }
    add_action('manage_posts_custom_column', 'display_post_id_column_content', 10, 2);

    // Ajouter une nouvelle colonne pour les IDs des pages
    function add_page_id_column($columns) {
    $columns['page_id_clmn'] = __('ID', 'textdomain');
    return $columns;
    }
    add_filter('manage_pages_columns', 'add_page_id_column');

    // Afficher le contenu de la colonne ID pour les pages
    function display_page_id_column_content($column, $post_id) {
    if ($column === 'page_id_clmn') {
    echo $post_id;
    }
    }
    add_action('manage_pages_custom_column', 'display_page_id_column_content', 10, 2);

    // Style pour les colonnes ID
    function post_id_column_style() {
    echo '<style>
    .column-post_id_clmn, .column-page_id_clmn { width: 200px; text-align: center; }
    </style>';
    }
    add_action('admin_head', 'post_id_column_style');

    // Recherche par ID pour les articles et les pages
    function search_by_post_or_page_id( $query ) {
    global $pagenow;

    if ( is_admin() && $pagenow == 'edit.php' && isset( $_GET['s'] ) && !empty($_GET['s']) ) {
    $post_id = absint( $_GET['s'] );
    if ( $post_id > 0 ) {
    $query->query_vars['p'] = $post_id;
    $query->query_vars['s'] = '';
    }
    }
    }
    add_action( 'pre_get_posts', 'search_by_post_or_page_id' );

    // Ajoute une nouvelle colonne (dashboard) pour ID des catégories
    function add_category_id_column( $columns ) {
    $columns['category_id'] = 'ID';
    return $columns;
    }
    add_filter( 'manage_edit-category_columns', 'add_category_id_column' );

    // Affiche les identifiants des catégories dans la nouvelle colonne
    function show_category_id_column( $content, $column_name, $term_id ) {
    if ( $column_name === 'category_id' ) {
    $content = $term_id;
    }
    return $content;
    }
    add_filter( 'manage_category_custom_column', 'show_category_id_column', 10, 3 );

    // Style pour aligner les identifiants au centre
    function category_id_column_style() {
    echo '<style>
    .column-category_id { width: 50px; text-align: center; }
    </style>';
    }
    add_action( 'admin_head', 'category_id_column_style' );

    // Recherche par ID
    function search_by_category_id( $query ) {
    global $pagenow;
    $taxonomy = isset($_GET['taxonomy']) ? sanitize_text_field($_GET['taxonomy']) : '';

    if ( is_admin() && $pagenow == 'edit-tags.php' && !empty($_GET['s']) && $taxonomy == 'category' ) {
    $term_id = absint( $_GET['s'] );
    if ( $term_id > 0 ) {
    $query->query_vars['include'] = array( $term_id );
    $query->query_vars['search'] = '';
    }
    }
    }
    add_action( 'pre_get_terms', 'search_by_category_id' );

    // Activer le support des catégories pour les pages
    function enable_categories_for_pages() {
    register_taxonomy_for_object_type('category', 'page');
    }
    add_action('init', 'enable_categories_for_pages');

    // Ajouter une nouvelle colonne personnalisée (image-article) à la liste des commandes WooCommerce
    function add_order_thumbnail_column($columns) {
    $columns['order_thumbnail'] = __('Miniature', 'woocommerce');
    return $columns;
    }
    add_filter('manage_edit-shop_order_columns', 'add_order_thumbnail_column', 10);

    function display_order_thumbnail_column_content($column, $post_id) {
    if ($column === 'order_thumbnail') {
    $order = wc_get_order($post_id);
    if ($order) {
    foreach ($order->get_items() as $item) {
    $product = $item->get_product();
    if ($product && is_object($product)) {
    echo $product->get_image(array(50, 50));
    }
    }
    }
    }
    }
    add_action('manage_shop_order_posts_custom_column', 'display_order_thumbnail_column_content', 10, 2);


    // Ajouter une nouvelle colonne pour les identifiants des images
    function add_media_id_column($columns) {
    $columns['media_id'] = __('ID', 'textdomain');
    return $columns;
    }
    add_filter('manage_media_columns', 'add_media_id_column');

    // Afficher le contenu de la colonne ID pour les images
    function display_media_id_column_content($column, $post_id) {
    if ($column === 'media_id') {
    echo $post_id;
    }
    }
    add_action('manage_media_custom_column', 'display_media_id_column_content', 10, 2);

    // Rendre la colonne triable pour les identifiants des images
    function make_media_id_column_sortable($columns) {
    $columns['media_id'] = 'ID';
    return $columns;
    }
    add_filter('manage_upload_sortable_columns', 'make_media_id_column_sortable');

    // Tri par ID pour les images
    function sort_media_by_id_column($vars) {
    if (isset($vars['orderby']) && 'ID' === $vars['orderby']) {
    $vars = array_merge($vars, array(
    'orderby' => 'ID'
    ));
    }
    return $vars;
    }
    add_filter('request', 'sort_media_by_id_column');

    // Recherche par ID pour les médias
    function search_media_by_id( $query ) {
    global $pagenow;

    if ( is_admin() && $pagenow == 'upload.php' && isset( $_GET['s'] ) && !empty($_GET['s']) ) {
    $media_id = absint( $_GET['s'] );
    if ( $media_id > 0 ) {
    $query->query_vars['p'] = $media_id;
    $query->query_vars['s'] = '';
    }
    }
    }
    add_action( 'pre_get_posts', 'search_media_by_id' );

    // Style pour la colonne ID
    function media_id_column_style() {
    echo '<style>
    .column-media_id { width: 250px; text-align: center; }
    </style>';
    }
    add_action('admin_head', 'media_id_column_style');
    Customisation des colonnes du tableau de bord

    • Cette réponse a été modifiée le il y a 3 jours et 21 heures par Broussaille. Raison: Bon, attendez un peu, y'a un bug
    #2476461
    Broussaille
    Participant
    Chevalier WordPress
    356 contributions

    Une correction : les IDs d’articles et de pages ne sont pas triables par ordre croissant ou décroissant (au début ça mettait le dawa, donc j’ai abandonné, mais ça fonctionne pour les médias, ça doit donc être adaptable…)

    Et sinon, ma modification du dessus [ « Bon, attendez un peu, y’a un bug »], c’est une erreur/coïncidence avec un problème du serveur… ah la la, faut pas tout faire en même temps !!!

    #2476462
    Broussaille
    Participant
    Chevalier WordPress
    356 contributions

    Une autre correction, j’ai changé la largeur à 100px, sinon sur un écran pas trop large, ça fout le bazar si l’on ouvre trop de colonnes, c’est donc à ajuster selon vos besoins et possibilités

    #2476647
    Joss47
    Modérateur
    Maître WordPress
    5196 contributions

    Bon tout ça est créé par ChatGPT, je sais que tout le monde n’est peut-être pas d’accord avec son utilisation. Donc si ça pose problème… les modos savent quoi faire de ce post

    j’ai pas de soucis avec ça perso DU MOMENT ou ce que tu pose comme code est vérifié et fonctionnel sur une installation.
    Certains font du ChatGPT ici sans forcément vérifier ou utiliser les codes qu’ils proposent, ils font juste un C/C bête de GPT, hors il dit parfois (voir souvent) des trucs qui ne fonctionne pas 🙂

    PS: J’ai pas mal de code aussi que j’utilise sur les boutiques de nos clients que je note sur mon site perso comme mémo, si jamais : https://josselynjayant.fr/codes-snippets-wordpress-woocommerce/

    #2476651
    Broussaille
    Participant
    Chevalier WordPress
    356 contributions

    Bonjour Joss. Oui, des fois il dit vraiment des c****ries (je m’amuse à lui faire écrire des fiches produits, c’est d’un triste parfois…). Mais bon, pour revenir au code : oui, je l’ai testé et il tourne sur mon site. Donc avec la configuration que j’ai. J’ai pensé que ça pouvait être utile…

    Merci pour le lien, j’irais voir ça.

    Bonne fin de journée.

6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.