WooCommerce管理者製品リストの列「is_in_stock」のコンテンツを上書きします

Dec 18 2020

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';
        }
    }
}
?>

しかし、これはデフォルトのコンテンツを上書きするのではなく、これに私のテキストを追加します。デフォルトのコンテンツは、在庫状況onstockbackorderまたはout of stockです。

カスタム製品タイプを作成しましたが、製品タイプis_in_stockが変数と等しい場合、列のコンテンツをオーバーライドしたいと思います。等しくない場合は、WooCommerceのデフォルトをエコーし​​ます。

列全体を削除して独自の列を追加することはできますが、producttypeが等しくない場合、デフォルトのコンテンツはありません。

誰が私を少し助けることができますか?

回答

3 7uc1f3r Dec 18 2020 at 15:19

デフォルトの列を削除して新しい列に置き換える必要はありません。オブジェクトにwoocommerce_admin_stock_htmlアクセスできる場所でフィルターを使用するだけで済み$productます。

そうすれば、既存の列に独自のテキスト/ステータスを追加できます。

だからあなたは得る:

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