如何向WooCommerce 4 中的產品添加自定義庫存狀態
背景
WooCommerce預設提供多種庫存狀態,包括有貨、缺貨和缺貨。但是,您可能需要建立自訂庫存狀態來滿足您的特定庫存管理需求。
建立自訂庫存狀態
要建立自訂庫存狀態,請使用下列程式碼主題的functions.php檔案或自訂外掛程式中的片段:
<code class="php">use WooCommerce\Admin\HTML; use WooCommerce\Utilities\Product;</code>
<code class="php">/** * Add custom stock status options. * * @param array $status Existing stock status options. * @return array Updated stock status options. */ function filter_woocommerce_product_stock_status_options( $status ) { // Add new statuses $status['pre_order'] = __( 'Pre order', 'woocommerce' ); $status['contact_us'] = __( 'Contact us', 'woocommerce' ); return $status; } add_filter( 'woocommerce_product_stock_status_options', 'filter_woocommerce_product_stock_status_options', 10, 1 ); /** * Modify availability text based on stock status. * * @param string $availability Availability text. * @param WC_Product $product Product object. * @return string Modified availability text. */ function filter_woocommerce_get_availability_text( $availability, $product ) { // Get stock status $product_stock_status = $product->get_stock_status(); // Modify availability text switch ( $product_stock_status ) { case 'pre_order': $availability = __( 'Pre order', 'woocommerce' ); break; case 'contact_us': $availability = __( 'Contact us', 'woocommerce' ); break; } return $availability; } add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 ); /** * Modify availability CSS class based on stock status. * * @param string $class CSS class. * @param WC_Product $product Product object. * @return string Modified CSS class. */ function filter_woocommerce_get_availability_class( $class, $product ) { // Get stock status $product_stock_status = $product->get_stock_status(); // Modify CSS class switch ( $product_stock_status ) { case 'pre_order': $class = 'pre-order'; break; case 'contact_us': $class = 'contact-us'; break; } return $class; } add_filter( 'woocommerce_get_availability_class', 'filter_woocommerce_get_availability_class', 10, 2 ); // Admin side /** * Modify stock HTML on admin products list table. * * @param string $stock_html Stock HTML. * @param WC_Product $product Product object. * @return string Modified stock HTML. */ function filter_woocommerce_admin_stock_html( $stock_html, $product ) { // Simple if ( $product->is_type('simple') ) { // Get stock status $product_stock_status = $product->get_stock_status(); // Variable } elseif ( $product->is_type('variable') ) { foreach ( $product->get_visible_children() as $variation_id ) { // Get product $variation = wc_get_product( $variation_id ); // Get stock status $product_stock_status = $variation->get_stock_status(); /* Currently the status of the last variant in the loop will be displayed. So from here you need to add your own logic, depending on what you expect from your custom stock status. By default, for the existing statuses. The status displayed on the admin products list table for variable products is determined as: - Product should be in stock if a child is in stock. - Product should be out of stock if all children are out of stock. - Product should be on backorder if all children are on backorder. - Product should be on backorder if at least one child is on backorder and the rest are out of stock. */ } } // Stock status switch ( $product_stock_status ) { case 'pre_order': $stock_html = '<mark class="pre-order" style="background:transparent none;color:#33ccff;font-weight:700;line-height:1;">' . __( 'Pre order', 'woocommerce' ) . '</mark>'; break; case 'contact_us': $stock_html = '<mark class="contact-us" style="background:transparent none;color:#cc33ff;font-weight:700;line-height:1;">' . __( 'Contact us', 'woocommerce' ) . '</mark>'; break; } return $stock_html; } add_filter( 'woocommerce_admin_stock_html', 'filter_woocommerce_admin_stock_html', 10, 2 );</code>
新增至單一產品
建立自訂狀態後,您需要將它們新增至單一產品。
前端顯示
自訂庫存狀態現在將顯示在您網站的前端,包括單一產品頁面和產品檔案。
故障排除
如果自訂狀態未顯示在前端或管理中,請確保程式碼片段已正確添加到您的主題或插件,並且過濾器已正確命名和掛鉤。
以上是如何在 WooCommerce 4 中建立和使用自訂庫存狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!