2017-02-13 23 views
3

Эта функция находится в классе WC_Abstract_Order (основные файлы)Настройка пользовательских статусов заказа в качестве действительных для оплаты

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

мне нужно добавить дополнительный статус заказа на заказ в массив, но не может работать код для functions.php, чтобы переопределить функцию, которая будет, как это - т.е. только с дополнительным статусом:

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

Любая помощь с благодарностью принято.

Спасибо.

ответ

0

это работает, спасибо @ 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; 
} 

then this b it from 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

Прежде всего, необходимо зарегистрировать свой собственный статус (если не сделано):

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

Сейчас в woocommerce_valid_order_statuses_for_payment фильтра крюка, Вы можете установить это «хСтатус» в качестве статуса действительного порядка для оплаты, таким простым способом:

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

код идет в function.php файле вашего активного ребенка темы (или темы), или также в любой файл плагина.

Я не проверял на самом деле этот последний фрагмент кода, но логически она должна работать, как ожидалось ...


Связанные ответ: Adding custom order statuses in Admin Dashboard Stats Widget

+0

благодарит за помощь. Я не могу отметить это, потому что я не могу заставить его работать с нашей установкой, но у меня нет оснований полагать, что ваш код неверен и должен работать для других. –

+0

Спасибо за помощь, в конце концов я решил отказаться от плагина и использовать код, похожий на ваши функции. - Мне нужно использовать немного другой код для первого бита, поскольку он запустил ошибку с помощью плагина, который я использую, см. Мой дополнительный ответ с этим альтернативным кодом - не уверен, в чем разница, но я думаю, что-то это .. –

 Смежные вопросы

  • Нет связанных вопросов^_^