Как добавить/удалить столбцы в списке продуктов администратора Woocommerce
Я хочу настроить столбцы в административной области Woocommerce при просмотре списка продуктов.
В частности, я хочу удалить некоторые столбцы и добавить несколько столбцов пользовательских полей.
Я перепробовал много решений, перечисленных в Интернете, и я могу удалить столбцы и добавить новые, например:
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;
}
Но как мне заполнить новый столбец фактическими данными о продукте (в данном случае, настраиваемым полем с именем 'offercode')?
Ответы
Ответ 1
Фильтр manage_edit-{post_type}_columns
используется только для фактического добавления столбца. Чтобы контролировать то, что отображается в столбце для каждого сообщения (продукта), вы можете использовать действие manage_{post_type}_posts_custom_column
. Это действие вызывается для каждого настраиваемого столбца для каждого сообщения, и он передает два аргумента: $column
и $postid
.
Использование этого действия довольно просто, вы можете найти пример для отображения пользовательского поля "offerкод" ниже:
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 );
}
}
Вы также можете использовать плагин для управления этим поведением, например столбцы администратора.
Ответ 2
этот вид таблицы используется многими плагинами и wordpress. Вы должны проверить имя столбца. $columns ['tags'] - это тег в Wordpress Post View, а не в Woocommerce!
Вот список некоторых $столбцов, используемых 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']
и это правильный фильтр, чтобы применить эти удаления.
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;
}
Ответ 3
Если вы также хотите сортировать столбцы (как показано выше, ваш столбец будет просто прикреплен к концу), вы можете сделать что-то подобное в своем крюке "manage_edit-product_columns" (пример берется из класса я 'реализовано):
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;
}
Ответ 4
В случае, если кто-то хочет вставить в определенном порядке, вот как добавить столбец справа после Price
:
add_filter( 'manage_edit-product_columns', 'wootix_show_product_order', 15 ) ;
function wootix_show_product_order( $columns )
{
//add column
$arr = array( 'wootix_credit' => __( 'Credits', 'wootix' ) ) ;
array_splice( $columns, 6, 0, $arr ) ;
return $columns ;
}