- WordPress :6.4
- Statut : hors support
- Ce sujet contient 11 réponses, 4 participants et a été mis à jour pour la dernière fois par
Broussaille, le il y a 2 mois et 1 semaine.
-
AuteurMessages
-
10 juillet 2024 à 17 h 40 min #2476046
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 : o2switchProblè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 11 mois et 2 semaines 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 11 mois et 2 semaines par
Joss47.
-
Ce sujet a été modifié le il y a 11 mois et 1 semaine par
Broussaille.
17 juillet 2024 à 15 h 38 min #2476436Bonjour à 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 11 mois et 1 semaine par
Broussaille. Raison: Bon, attendez un peu, y'a un bug
17 juillet 2024 à 16 h 05 min #2476461Une 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 !!!
17 juillet 2024 à 16 h 16 min #2476462Une 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
19 juillet 2024 à 19 h 31 min #2476647Bon 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/
19 juillet 2024 à 19 h 48 min #2476651Bonjour 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.
23 juillet 2024 à 18 h 50 min #2476773Cette réponse a été marquée comme privée.22 février 2025 à 19 h 27 min #2486239Bonjour à toutes et à tous. Bon me revoilà avec mes custom-columns… qui ne fonctionnent plus. Enfin plus comme avant (c’était mieux avant…). En fait ça fonctionne à moitié, les colonnes sont créées, les ID s’affichent mais plus moyen de les trier. J’avais fait une « mise à jour » de mon mu-plugin avec ce code :
<?php
// ------------------------------------------------------------------------
// Colonnes personnalisées et recherche par ID
// ------------------------------------------------------------------------
// Vérifie si les fonctions existent avant de les déclarer pour éviter les erreurs de redéfinition
if ( ! function_exists( 'add_post_id_column' ) ) {
// 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');
}
if ( ! function_exists( 'display_post_id_column_content' ) ) {
// 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);
}
if ( ! function_exists( 'add_page_id_column' ) ) {
// 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');
}
if ( ! function_exists( 'display_page_id_column_content' ) ) {
// 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 );
}
if ( ! function_exists( 'post_id_column_style' ) ) {
// Style pour les colonnes ID
function post_id_column_style() {
echo '<style>
.column-post_id_clmn, .column-page_id_clmn { width: 80px; }
</style>';
}
add_action('admin_head', 'post_id_column_style');
}
if ( ! function_exists( 'search_by_post_or_page_id' ) ) {
// Recherche par ID pour les articles et les pages
function search_by_post_or_page_id( $query ) {
global $pagenow;
error_log( 'Function called: search_by_post_or_page_id' );
error_log( 'Pagenow: ' . $pagenow );
error_log( 'Search term: ' . ( isset( $_GET['s'] ) ? $_GET['s'] : 'Not set' ) );
if ( is_admin() && $pagenow == 'edit.php' && isset( $_GET['s'] ) && ! empty( $_GET['s'] ) ) {
$post_id = absint( $_GET['s'] );
error_log( 'Post ID: ' . $post_id );
if ( $post_id > 0 ) {
$query->query_vars['p'] = $post_id;
$query->query_vars['s'] = '';
error_log( 'Query modified for ID: ' . $post_id );
}
}
}
add_action( 'pre_get_posts', 'search_by_post_or_page_id' );
}
if ( ! function_exists( 'add_product_category_id_column' ) ) {
// Ajouter une nouvelle colonne pour les IDs des catégories de produits
function add_product_category_id_column($columns) {
$columns['product_category_id'] = __('ID', 'textdomain');
return $columns;
}
add_filter('manage_edit-product_cat_columns', 'add_product_category_id_column');
}
if ( ! function_exists( 'display_product_category_id_column_content' ) ) {
// Afficher le contenu de la colonne ID pour les catégories de produits
function display_product_category_id_column_content($content, $column_name, $term_id) {
if ($column_name === 'product_category_id') {
$content = $term_id;
}
return $content;
}
add_filter('manage_product_cat_custom_column', 'display_product_category_id_column_content', 10, 3);
}
if ( ! function_exists( 'product_category_id_column_style' ) ) {
// Style pour aligner les identifiants au centre
function product_category_id_column_style() {
echo '<style>
.column-product_category_id { width: 100px; text-align: center; }
</style>';
}
add_action('admin_head', 'product_category_id_column_style');
}
if ( ! function_exists( 'search_by_product_category_id' ) ) {
// Recherche par ID pour les catégories de produits
function search_by_product_category_id( $query ) {
global $pagenow;
$taxonomy = isset($_GET['taxonomy']) ? sanitize_text_field($_GET['taxonomy']) : '';
error_log('Function called: search_by_product_category_id');
error_log('Pagenow: ' . $pagenow);
error_log('Taxonomy: ' . $taxonomy);
error_log('Search term: ' . (isset($_GET['s']) ? $_GET['s'] : 'Not set'));
if ( is_admin() && $pagenow == 'edit-tags.php' && !empty($_GET['s']) && $taxonomy == 'product_cat' ) {
$term_id = absint( $_GET['s'] );
error_log('Term ID: ' . $term_id);
if ( $term_id > 0 ) {
$query->query_vars['include'] = array( $term_id );
$query->query_vars['search'] = '';
error_log('Query modified for Term ID: ' . $term_id);
}
}
}
add_action( 'pre_get_terms', 'search_by_product_category_id' );
}
if ( ! function_exists( 'add_media_id_column' ) ) {
// 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');
}
if ( ! function_exists( 'display_media_id_column_content' ) ) {
// 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);
}
if ( ! function_exists( 'make_media_id_column_sortable' ) ) {
// 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');
}
if ( ! function_exists( 'sort_media_by_id_column' ) ) {
// 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');
}
if ( ! function_exists( 'search_media_by_id' ) ) {
// 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' );
}
if ( ! function_exists( 'media_id_column_style' ) ) {
// Style pour la colonne ID
function media_id_column_style() {
echo '<style>
.column-media_id { width: 100px; text-align: center; }
</style>';
}
add_action('admin_head', 'media_id_column_style');
}
if ( ! function_exists( 'enable_categories_for_pages' ) ) {
// 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');
}custom-admin-columnsÇa fonctionnait très bien (l’affichage, le tri, etc…) jusque…il y a pas longtemps, et puis là, Paf ! C’est cuit.
Sur un sous-domaine, j’ai exactement le même mu-plugin qui fonctionne impeccablement.
J’ai fait le test de base avec toutes les extensions désactivées, ce qui ne change rien, donc… une incompatibilité quelque part avec WordPress directement ? Je ne suis pas assez calé pour trouver. J’ai fait marner Perplexity là-dessus, mais pas de résultat… Si vous avez une idée ? Merci.
-
Cette réponse a été modifiée le il y a 3 mois et 3 semaines par
Broussaille. Raison: C'est pas du html, c'est du php !
13 avril 2025 à 14 h 17 min #2487895Du code AI dans woocommerce c’est téméraire… 🙂
Installe ce plugin : Query Monitor – The developer tools panel for WordPress
Il devrait te trouver ton erreur php. Sinon wp-config -> active le debug.
Tu auras aussi le poids de tes requêtes ce qui n’est pas un luxe notamment dans woocommerce.
13 avril 2025 à 15 h 05 min #2487899Bonjour, et merci BKaernet… Mais, en fait, depuis février j’ai trouvé la solution… c’était un snippet qui posait problème. Depuis ça fonctionne plutôt bien. Mais le mu-plugin a été modifié depuis. Après, oui, du code AI dans Woocommerce… Mais ça reste du code, et plutôt bien écrit…
Pour le poids des requêtes, en fait j’ai abandonné mon commerce en ligne, et grandement modifié et allégé mes pages… Ce n’est pas encore le top (selon GreenIT), mais ce n’est pas si mal…
13 avril 2025 à 19 h 20 min #2487910Bonjour,
@bkaernel : c’est quoi l’intérêt de remonter cette discussion ? Vous avez des actions auprès de l’auteur de Query-Monitor, pour nous le sortir à chaque fois ?
13 avril 2025 à 19 h 35 min #2487912😂 Désolé Flobogo. Je pensais que ça partais d’une bonne intention…
-
Ce sujet a été modifié il y a 11 mois et 2 semaines par
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.