2017-02-13 2 views
3

Cette fonction est situé dans la WC_Abstract_Order classe (fichiers de base)Définition des statuts de commande personnalisé comme valable pour le paiement

/* Checks if an order needs payment, based on status and order total. 
* 
* @return bool 
*/ 
public function needs_payment() { 

    $valid_order_statuses = apply_filters('woocommerce_valid_order_statuses_for_payment', array('pending', 'failed'), $this); 

    if ($this->has_status($valid_order_statuses) && $this->get_total() > 0) { 
     $needs_payment = true; 
    } else { 
     $needs_payment = false; 
    } 

    return apply_filters('woocommerce_order_needs_payment', $needs_payment, $this, $valid_order_statuses); 
} 

Je dois ajouter un statut supplémentaire de commande personnalisé au tableau mais ne peut pas travailler le code pour functions.php passer outre la fonction, ce qui serait comme celui-ci - soit un peu avec le statut ajouté:

public function needs_payment() { 

    $valid_order_statuses = apply_filters('woocommerce_valid_order_statuses_for_payment', array('pending', 'failed','neworderstatus'), $this); 

    if ($this->has_status($valid_order_statuses) && $this->get_total() > 0) { 
     $needs_payment = true; 
    } else { 
     $needs_payment = false; 
    } 

    return apply_filters('woocommerce_order_needs_payment', $needs_payment, $this, $valid_order_statuses); 
} 

Toute aide acceptée avec reconnaissance.

Merci.

Répondre

0

cela fonctionne, merci @ LoicTheAztec

// New order status AFTER woo 2.2 
    add_action('init', 'register_my_new_order_statuses'); 

    function register_my_new_order_statuses() { 
register_post_status('wc-custom-status', array(
    'label'      => _x('Custom Status', 'Order status', 'woocommerce'), 
    'public'     => true, 
    'exclude_from_search'  => false, 
    'show_in_admin_all_list' => true, 
    'show_in_admin_status_list' => true, 
    'label_count'    => _n_noop('Custom Status <span class="count">(%s)</span>', 'Custom Status<span class="count">(%s)</span>', 'woocommerce') 
)); 
} 

    add_filter('wc_order_statuses', 'my_new_wc_order_statuses'); 

    // Register in wc_order_statuses. 
    function my_new_wc_order_statuses($order_statuses) { 
$order_statuses['wc-custom-status'] = _x('Custom Status', 'Order status', 'woocommerce'); 

return $order_statuses; 
} 

alors ce b il de Loic -

add_filter('woocommerce_valid_order_statuses_for_payment', 'custom_status_valid_for_payment', 10, 2); 
    function custom_status_valid_for_payment($statuses, $order) { 

// Registering the custom status as valid for payment 
$statuses[] = 'wc-custom-status'; 

return $statuses; 
} 
4

D'abord, vous devez vous inscrire votre statut personnalisé (Si ne se fait pas):

// Register new status 
add_action('init', 'register_custom_order_statuses'); 
function register_custom_order_statuses() { 
    register_post_status('wc-custom-status', array(
     'label' => 'Custom Status', 
     'public' => true, 
     'exclude_from_search' => false, 
     'show_in_admin_all_list' => true, 
     'show_in_admin_status_list' => true, 
     'label_count' => _n_noop('Custom Status <span class="count">(%s)</span>', 'Custom Status <span class="count">(%s)</span>') 
    )); 
} 

// Add to list of WC Order statuses 
add_filter('wc_order_statuses', 'add_custom_order_statuses'); 
function add_custom_order_statuses($order_statuses) { 
    $new_order_statuses = array(); 

    // add new order status after processing for example 
    foreach ($order_statuses as $key => $status) { 
     $new_order_statuses[$key] = $status; 
     if ('wc-processing' === $key) { 
      $new_order_statuses['wc-custom-status'] = 'Custom Status'; 
     } 
    } 
    return $new_order_statuses; 
} 

maintenant dans woocommerce_valid_order_statuses_for_payment crochet de filtre, vous pouvez définir ce « statut personnalisé » comme état de la commande de paiement valable, de cette manière simple:

add_filter('woocommerce_valid_order_statuses_for_payment', 'custom_status_valid_for_payment', 10, 2); 
function custom_status_valid_for_payment($statuses, $order) { 

    // Registering the custom status as valid for payment 
    $statuses[] = 'wc-custom-status'; 

    return $statuses; 
} 

code va dans le fichier function.php de votre thème enfant actif (ou le thème) ou encore dans un fichier de plug-in.

Je n'ai pas vraiment tester ce dernier extrait de code, mais logiquement il devrait fonctionner comme prévu ...


réponse connexe: Adding custom order statuses in Admin Dashboard Stats Widget

+0

merci pour l'aide. Je ne peux pas marquer cela résolu car je ne peux pas le faire fonctionner avec notre configuration mais je n'ai aucune raison de croire que votre code n'est pas correct et devrait fonctionner pour les autres. –

+0

Merci pour l'aide, à la fin j'ai décidé d'abandonner le plugin et d'utiliser un code similaire à vos fonctions. - Je dois utiliser un code légèrement différent pour le premier bit car il a généré une erreur avec un plugin que j'utilise, voir ma réponse supplémentaire avec ce code alternatif - je ne sais pas quelle est la différence mais je suppose que c'est quelque chose .. –