覆盖 WooCommerce 管理产品列表中 "is_in_stock" 列的内容

Override content from column "is_in_stock" in WooCommerce admin product list

我尝试覆盖 WooCommerce 管理产品列表中“is_in_stock”列的内容。

为此我目前使用:

<?php
add_action('manage_product_posts_custom_column', 'stock_override' );
 
function stock_override($column_name){
    global $post;
    $product = wc_get_product($post->ID);
    if( $product->is_type('variable')){
        if ($column_name == 'is_in_stock') {
            echo 'own text';
        }
    }
}
?>

但这并没有覆盖默认内容,而是将我的文字添加到其中。默认内容为库存状态onstockbackorderout of stock.

我创建了一个自定义产品类型,如果产品类型等于变量,我想覆盖列 is_in_stock 中的内容。如果不相等,则回显 WooCommerce 的默认值。

我可以删除整个列并添加我自己的列,但如果产品类型不相等,我就没有默认内容。

谁能帮帮我?

无需删除默认列并将其替换为新列,您只需在可以访问 $product 对象的地方使用 woocommerce_admin_stock_html 过滤器即可。

这样您就可以将自己的 text/statuses 添加到现有列中。

所以你得到:

// Admin product list: is_in_stock
function filter_woocommerce_admin_stock_html( $stock_html, $product ) {
    // Condition
    if ( $product->is_type('variable') ) {
        $stock_html = '<mark class="someclass" style="background:transparent none; color:#33ccff; font-weight:700; line-height:1;">' . __( 'My text', 'woocommerce' ) . '</mark>';      
    }

    return $stock_html;
}
add_filter( 'woocommerce_admin_stock_html', 'filter_woocommerce_admin_stock_html', 10, 2 );