Не удается проверить, установлен ли пользовательский флажок мета продукта, установленный в Dokan. New-single-product.php проверяется при циклическом просмотре позиций заказа. - PullRequest
0 голосов
/ 06 марта 2019

Я создал собственный мета-флажок в шаблоне Dokan new-single-product.php:

<div class="dokan-form-group">
   <div class="dokan-input-group">
   <?php dokan_post_input_box( $post_id, '_custom_field', array( 'label' => __('Custom Checkbox','dokan') ), 'checkbox' ); ?>
  </div>

Затем использовали следующий код для хранения значений:

add_action( 'woocommerce_product_options_general_product_data', 'wc_custom_add_custom_fields' );
function wc_custom_add_custom_fields() {
    global $woocommerce, $post;

   echo '<div class="options_group">';

  // Checkbox
    woocommerce_wp_checkbox( 
    array( 
        'id'            => '_custom_field',
        'label'         => __('Custom Field', 'woocommerce' )
        )
    );

  echo '</div>';
}

// Save Fields
add_action( 'dokan_process_product_meta', 'wc_custom_save_custom_fields' );
add_action( 'dokan_new_product_added', 'wc_custom_save_custom_fields' );
add_action( 'woocommerce_process_product_meta', 'wc_custom_save_custom_fields' );
function wc_custom_save_custom_fields($post_id) {

    $woocommerce_wccaf_precio_por_ = $_POST['_custom_field'];
    if( !empty( $woocommerce_wccaf_precio_por_) || empty( $woocommerce_wccaf_precio_por_))
        update_post_meta( $post_id, '_custom_field', esc_attr( $woocommerce_wccaf_precio_por_ ) );

}

Теперь я хочу, чтобы логика была следующей: «Пройти позиции заказа», если у элемента есть пользовательский флажок, добавить итоговую цену строки элемента в переменную «сумма суммы». Это выполняется при завершении заказа.

public function amount_total( $order_id ) {

                // Get Order
                $order   = wc_get_order( $order_id );
                $amount = 0;

                // Loop through order items
                $items = $order->get_items(); 

                foreach ( $order->get_items() as $item_id => $item ) {
                    $custom_field = $item->get_meta('_custom_field');
                    //$custom_field = wc_get_order_item_meta( $item_id, '_custom_field', true );
                //  $custom_field = get_post_meta( $item_id, '_custom_field', true );
                    $line_total = $item->get_total();

                    if( isset($custom_field) ) {
                        $amount += $line_total;
                    }
                }

У меня есть 3 разные переменные $ custom_field, так как я пробовал каждое найденное решение. Но ничего не работает.

Если я проверяю элемент на флажке в меню редактирования продукта для Dokan, он показывает это: снимок экрана

Кажется, есть 2 входа, 1 скрытый. Может быть, я должен пытаться получить атрибут «флажок», а не фактические значения?

1 Ответ

0 голосов
/ 07 марта 2019

Есть еще пара статей на эту тему, и я думаю, что моя проблема в другом, однако я сделал следующее и исправил это с помощью общего решения, которое я нашел в других сообщениях:

  1. Проверено, что мета-значение на самом деле хранится в базе данных для мета-ключа .

  2. Проверенные параметры метода get_post_meta доступны для чтения методу.(в моем случае $ item_id был недействительным, метод требует фактического идентификатора записи продукта)

  3. Проверьте, что условие действительно использовало правильные значения: if ($ custom_field == "yes")

Окончательный код для функции foreach:

foreach ( $order->get_items() as $item_id => $item ) {
                $product_id = $item->get_product_id();
                $custom_field = get_post_meta( $product_id, '_custom_field', true );
                $line_total = $item->get_total();

                if( $custom_field == "yes" ) {
                    $amount += $line_total;
                }
            }
...