per chiunque sia interessato, ecco la soluzione completa, basata sull'approccio di Laila. Avvertimento! La mia soluzione è destinata a funzionare solo con WooCommerce opzione "Gestisci stock" disabilitata! Non sto lavorando con quantità esatte di articoli in magazzino. Tutto il codice va a functions.php
, come al solito.
back-end parte
Rimozione nativo campo discesa magazzino di stato. Aggiunta della classe CSS per distinguere il mio nuovo campo personalizzato. Dropdown ha ora la nuova opzione "Su richiesta".
function add_custom_stock_type() {
?>
<script type="text/javascript">
jQuery(function(){
jQuery('._stock_status_field').not('.custom-stock-status').remove();
});
</script>
<?php
woocommerce_wp_select(array('id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __('Stock status', 'woocommerce'), 'options' => array(
'instock' => __('In stock', 'woocommerce'),
'outofstock' => __('Out of stock', 'woocommerce'),
'onrequest' => __('On Request', 'woocommerce'), // The new option !!!
), 'desc_tip' => true, 'description' => __('Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce')));
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
Purtroppo, WooCommerce salverà solo "instock" o "Outofstock" valori con le sue funzioni native. Quindi, dopo l'elaborazione dei dati di prodotto, devo ri-salvare di nuovo il mio stato di magazzino.
function save_custom_stock_status($product_id) {
update_post_meta($product_id, '_stock_status', wc_clean($_POST['_stock_status']));
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);
Template parte
E l'ultima cosa - devo modificare i dati restituiti dalla funzione di prodotto get_availability()
. Quando "gestione delle scorte" è disattivato, WooCommerce conosce solo i valori "instock" e "outofstock", di nuovo. Quindi ho controllato lo stato delle scorte da solo.
function woocommerce_get_custom_availability($data, $product) {
switch($product->stock_status) {
case 'instock':
$data = array('availability' => __('In stock', 'woocommerce'), 'class' => 'in-stock');
break;
case 'outofstock':
$data = array('availability' => __('Out of stock', 'woocommerce'), 'class' => 'out-of-stock');
break;
case 'onrequest':
$data = array('availability' => __('On request', 'woocommerce'), 'class' => 'on-request');
break;
}
return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
Forse non è una soluzione a prova di proiettile ... Lo aggiorno, alla fine.
Spiacente ma ciò che si sta cercando non è possibile senza alterare i file principali, le cui modifiche andranno perse durante l'aggiornamento. https://support.woothemes.com/hc/communities/public/questions/202868126-Adding-a-stock-choice –
Ho già visto questo link ma mi chiedevo se ci fosse un'altra soluzione. Puoi controllare la mia risposta qui sotto. – Laila