web-dev-qa-db-fra.com

Comment ajouter/supprimer des colonnes dans la liste de produits de woocommerce admin

Je souhaite personnaliser les colonnes dans Woocommerce sous admin lors de l'affichage de la liste de produits.

Plus précisément, je souhaite supprimer certaines colonnes et ajouter plusieurs colonnes de champs personnalisés.

J'ai essayé beaucoup de solutions listées en ligne, et je peux supprimer des colonnes et en ajouter de nouvelles comme ceci:

add_filter( 'manage_edit-product_columns', 'show_product_order',15 );
function show_product_order($columns){

   //remove column
   unset( $columns['tags'] );

   //add column
   $columns['offercode'] = __( 'Offer Code'); 

   return $columns;
}

Mais comment puis-je renseigner la nouvelle colonne avec les données de produit réelles (dans ce cas, un champ personnalisé appelé "offercode")?

16
lilbiscuit

Le filtre manage_edit-{post_type}_columns sert uniquement à ajouter la colonne. Pour contrôler ce qui est affiché dans la colonne pour chaque article (produit), vous pouvez utiliser l'action manage_{post_type}_posts_custom_column. Cette action est appelée pour chaque colonne personnalisée pour chaque publication et transmet deux arguments: $column et $postid.

En utilisant cette action est assez facile, vous pouvez trouver un exemple pour afficher le champ personnalisé "code off" ci-dessous:

add_action( 'manage_product_posts_custom_column', 'wpso23858236_product_column_offercode', 10, 2 );

function wpso23858236_product_column_offercode( $column, $postid ) {
    if ( $column == 'offercode' ) {
        echo get_post_meta( $postid, 'offercode', true );
    }
}

Vous pouvez également utiliser un plugin pour contrôler ce comportement, tel que Colonnes Admin .

27
engelen

cette vue de table est utilisée par de nombreux plugins et wordpress elle-même. Vous devez vérifier le nom de la colonne. $ columns ['tags'] est la balise dans Wordpress Post View, pas dans Woocommerce!

Voici une liste de quelques colonnes $ utilisées par Woocommerce:

$columns['cb']  
$columns['thumb']
$columns['name'] 
$columns['sku'] 
$columns['is_in_stock']
$columns['price']
$columns['product_cat'] 
$columns['product_tag']
$columns['featured']
$columns['product_type']
$columns['date']

et c’est le bon filtre pour appliquer ces suppressions.

add_filter( 'manage_edit-product_columns', 'change_columns_filter',10, 1 );
function change_columns_filter( $columns ) {
unset($columns['product_tag']);
unset($columns['sku']);
unset($columns['featured']);
unset($columns['product_type']);
return $columns;
}
7

Si vous souhaitez en outre trier les colonnes (comme indiqué ci-dessus, votre colonne sera simplement attachée à la fin), vous pouvez faire quelque chose comme cela dans votre crochet de "manage_edit-product_columns" (l'exemple est tiré d'une classe que j'ai implémentée). ):

const BACKEND_PRODUCT_GRID_FIELD_SORTORDER = [
    'cb',
    'thumb',
    'name',
    'pa_size_text',
    'sku',
    'is_in_stock',
    'price',
    'product_cat',
    'product_tag',
    'featured',
    'product_type',
    'date',
    'stats',
    'likes'
];

/**
 * Registers new columns for the backend products grid of Woocommerce.
 * Additionally it sorts the fields after
 * self::BACKEND_PRODUCT_GRID_FIELD_SORTORDER. Fields not included in
 * self::BACKEND_PRODUCT_GRID_FIELD_SORTORDER will be attached to the end of
 * the array.
 *
 * @param array $aColumns - the current Woocommerce backend grid columns
 *
 * @return array - the extended backend grid columns array
 */
public function add_columns_to_product_grid( $aColumns ) {
    $aColumns['pa_size_text'] = __( 'Unit size', 'intolife_misc' );
    #unset($aColumns['thumb']);
    $aReturn = [];
    foreach ( self::BACKEND_PRODUCT_GRID_FIELD_SORTORDER as $sKey ) {
        if ( isset( $aColumns[ $sKey ] ) ) {
            $aReturn[ $sKey ] = $aColumns[ $sKey ];
        }
    }

    /**
     * search additional unknown fields and attache them to the end
     */
    foreach ( $aColumns as $sKey => $sField ) {
        if ( ! isset( $aReturn[ $sKey ] ) ) {
            $aReturn[ $sKey ] = $sField;
        }
    }

    return $aReturn;
}
1
Marcel Lange