web-dev-qa-db-ja.com

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」と呼ばれるカスタムフィールド)をどのように入力しますか?

19
lilbiscuit

フィルターmanage_edit-{post_type}_columnsは、実際に列を追加するためにのみ使用されます。各投稿(製品)の列に表示される内容を制御するには、manage_{post_type}_posts_custom_columnアクション。このアクションは、すべての投稿のカスタム列ごとに呼び出され、2つの引数を渡します:$columnおよび$postid

このアクションの使用は非常に簡単です。以下のカスタムフィールド「offercode」を表示する例を見つけることができます。

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 );
    }
}

Admin Columns などのプラグインを使用して、この動作を制御することもできます。

30
engelen

このテーブルビューは多くのプラグインとwordpress自体で使用されます。列名を確認する必要があります。$ columns ['tags']はWordpress Woocommerceではなく、ポストビュー!

Woocommerceで使用されるいくつかの$ columnsのリストは次のとおりです。

$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;
}
10

さらに列をソートする場合(上記のように、列は最後に接続されるだけです)、「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;
}
1
Marcel Lange

誰かが特定の順序で挿入したい場合は、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 ;
}
0
harrrrrrry