Heim > Artikel > Backend-Entwicklung > Wie erstelle und verwende ich benutzerdefinierte Lagerstatus in WooCommerce 4?
So fügen Sie benutzerdefinierten Lagerstatus zu Produkten in WooCommerce 4 hinzu
Hintergrund
WooCommerce von Die Standardeinstellung bietet mehrere Lagerstatus, darunter „Auf Lager“, „Nicht vorrätig“ und „Im Rückstand“. Möglicherweise müssen Sie jedoch benutzerdefinierte Lagerstatus erstellen, um Ihren spezifischen Anforderungen an die Bestandsverwaltung gerecht zu werden.
Benutzerdefinierte Lagerstatus erstellen
Um benutzerdefinierte Lagerstatus zu erstellen, verwenden Sie den folgenden Code Snippet in der Datei „functions.php“ Ihres Themes oder ein benutzerdefiniertes Plugin:
<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>
Zu einzelnen Produkten hinzufügen
Sobald Sie die benutzerdefinierten Status erstellt haben, können Sie Sie müssen sie zu einzelnen Produkten hinzufügen.
Frontend-Anzeige
Die benutzerdefinierten Lagerstatus werden nun im Frontend Ihrer Website angezeigt, sowohl auf den einzelnen Produktseiten als auch in den Produktarchiven.
Fehlerbehebung
Wenn die Benutzerdefinierte Status werden nicht im Frontend oder im Admin angezeigt. Stellen Sie sicher, dass das Code-Snippet korrekt zu Ihrem Theme oder Plugin hinzugefügt wurde und dass die Filter korrekt benannt und verknüpft sind.
Das obige ist der detaillierte Inhalt vonWie erstelle und verwende ich benutzerdefinierte Lagerstatus in WooCommerce 4?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!