2014-02-10 5 views
2

Код, указанный ниже, используется для получения данных по продуктам категории «книги» на моем веб-сайте Wordpress с использованием Woocommerce.Получить вес продукта от Wordpress

<?php 
$args = array('post_type' => 'product', 'posts_per_page' => 200, 'product_cat' => 'books'); 
     $loop = new WP_Query($args); 


    $send_array = array(); 
     while ($loop->have_posts()) : $loop->the_post(); 
     global $product; 

    $send_array[] = array(

     'id' => get_the_ID(), 
     'title' => get_the_title(), 
     'content' => get_the_content(), 
     'regular_price' => get_post_meta(get_the_ID(), '_regular_price', true), 
     'sale_price'=> get_post_meta(get_the_ID(), '_sale_price', true), 
     'weight' => woocommerce_get_product_terms($product->id, 'weight', 'names') 

    ); 

    endwhile; 

    wp_reset_query(); 
     ob_clean(); 
     echo json_encode($send_array); 
     exit(); 

    ?> 

Это отлично работает и возвращает данные правильно атрибута weight исключением.

Это настраиваемый атрибут, установленный на моем веб-сайте с использованием Woocommerce. В моей базе данных атрибут веса отображается в таблице wp_woocommerce_attribute_taxonomies. Эта таблица содержит поле attribute_id, attribute_name, attribute_label и т.д.

Кода я использовал выше, чтобы получить ценность продукта weight не работает.

Я также пробовал 'weight' => get_post_meta(get_the_ID(), '_weight', true), но он отображается как пустая строка (вес: ""), даже если этот продукт имеет значение веса на веб-сайте.

Как получить вес для каждого продукта и добавить его к массиву на ключ weight, как я пытался выше.

Проводили некоторые исследования, и это, казалось, было предназначено для работы. Что я делаю не так?

Как исправить это?

ответ

1

Это работало для меня в получении веса конкретного продукта.

$item_weight=wp_get_post_terms($post->ID, 'pa_weight', array("fields" => "names")); 

$send_array[] = array(

    'id' => get_the_ID(), 
    'title' => get_the_title(), 
    'content' => get_the_content(), 
    'regular_price' => get_post_meta(get_the_ID(), '_regular_price', true), 
    'sale_price'=> get_post_meta(get_the_ID(), '_sale_price', true), 
    'weight' => $item_weight[0] 

); 

Это выглядело на определенном посту в цикле для возврата значений атрибутов для pa_weight.

1

Функция Woo Commerce «woocommerce_get_product_terms» возвращает массив. Я не очень хорошо знаком с результатами этой функции из Woo Commerce, но, полагая, что он не возвращает многомерный массив, вы должны назначить термины переменной вне вашего массива $ send_array и попытаться вернуть первый элемент в массив.

$weight = woocommerce_get_product_terms($product->id, 'pa_weight', 'names'); 

Затем массив будет использовать переменную $ веса примерно так:

$send_array[] = array(

    'id' => get_the_ID(), 
    'title' => get_the_title(), 
    'content' => get_the_content(), 
    'regular_price' => get_post_meta(get_the_ID(), '_regular_price', true), 
    'sale_price'=> get_post_meta(get_the_ID(), '_sale_price', true), 
    'weight' => $weight[0] 

); 

Если это не работает, вы должны сделать var_dump ($ веса) переменной чтобы увидеть, как Woo Commerce возвращает результат функции. Из этого вывода вы должны будете определить правильный индекс для использования, чтобы получить результат, который вам нужен.

+0

Я попытался это, но тогда значение ключа 'weight' обнаружился, как«нуль», и когда я использую' var_dump ($ веса) ', страница показывает пустой. Ничего не возвращалось. – Tester

+0

Вы должны предисловие к вашим ключам атрибутов с помощью «pa_», поэтому вес должен быть «pa_weight». Я настроил атрибут для веса, чтобы проверить его, и для меня возвращает массив весов. – pIxelnate

+0

Вы имеете в виду добавить предисловие «pa_» в панель инструментов Wordpress назад? Или мне просто нужно перейти на «pa_weight» в приведенном выше коде, т. Е. '$ Weight = woocommerce_get_product_terms ($ product-> id, 'pa_weight', 'names');' – Tester

0

Проверьте этот вариант.

$items = WC()->cart->get_cart(); 
$x = 0; 
foreach($items as $item => $values) { 
    $_product2 = $values['data']; 

    $getProductDetail = wc_get_product($values['product_id']); 

    echo $getProductDetail->get_image(); // accepts 2 arguments (size,  attr) 

    $weight = $getProductDetail->product_attributes; 
    echo 'Weight: '.$weight["weight"]["value"].'<br>'; 
} 
2
global $product;  
$product->get_weight(); 
+0

Добро пожаловать в SO. Просьба дать небольшое объяснение с вашим ответом, или кто-то может в конечном итоге отметить его как «очень низкий ответ». – Syfer

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