WooCommerce:基于产品ID的产品分类

时间:2016-02-26 21:27:36

标签: php arrays sorting woocommerce

我使用以下代码在WooCommerce中提取所有可用产品

$sortingArr = $my_cart;
$data = array();
$result = array(); 

    if ($wc_query->have_posts()) :
      while ($wc_query->have_posts()) :
        $wc_query->the_post(); 
        $product = new WC_Product(get_the_ID()); 

    $product_permalink = get_permalink();
    $product_title = get_the_title();
    $product_thumbnail_id = get_post_thumbnail_id();
    $product_thumbnail_url = wp_get_attachment_image_src( $product_thumbnail_id, 'medium', true );
    $product_description = apply_filters('the_content',get_the_excerpt()); 
    $product_price = $product->get_price_html();
    $product_cart = $product->single_add_to_cart_text();
    $product_id = $product->id;

    $data[$product->id] = array(
                          $product_permalink,
                          $product_title,
                          $product_thumbnail_url[0], 
                          $product_description,
                          $product_price,
                          $product_cart,
                          $product_id);

        endwhile; 
        wp_reset_postdata();

  //sorting
  foreach($sortingArr as $val){ 
    $result[array_search($val, $data)] = $val; 
  }

    foreach ($result as $value) {
            <!-- displaying HTML output -->   
   }
    endif;

现在,我尝试按照usort()asort()所述的$data函数和方法,使用当前位于购物车中的产品ID对这些产品进行排序。here。当我删除排序代码并显示$data数组时,一切正常。

编辑: {{1}}数组包含与产品ID相关的密钥,可能有助于根据购物车内的内容按另一个产品ID数组进行排序。

任何提示我做错了什么?

2 个答案:

答案 0 :(得分:0)

解决了问题

首先,我已将密钥分配给$data产品数组

    $data[$product->id] = array(
                      "permalink" => $product_permalink,
                      "title" => $product_title,
                      "thumbnail_url" => $product_thumbnail_url[0], 
                      "description" => $product_description,
                      "price" => $product_price,
                      "in_cart" => $product_cart,
                      "id" => $product_id);

由于我已将product_id指定为$data数组的键,因此我可以使用下面的循环进行排序

$sortedProducts = [];

foreach ($sortingArr as $id) {
    $sortedProducts[] = $data[$id];
}

如果某人没有带有相关键的$data数组,但是您将它们存储在该数组中,则可以始终使用array_column重新索引数组

// array_column is only available in PHP 5.5+
$data = array_column($data, null, 'id');

然后使用上述方法排序。

答案 1 :(得分:-1)

您拥有$data阵列,其中包含$product->id个密钥。因此你不能搜索$ data数组,因为你的指针必须是一个数组本身(更确切地说是指向同一数组的指针)

考虑到您的代码在位置6(第7个元素)上分配了产品ID,您可以替换

//sorting
foreach($sortingArr as $val){ 
    $result[array_search($val, $data)] = $val; 
}

// sorting
foreach($sortingArr as $val){ 
    // $data is an array of arrays, so you must look through item in position $data[$i][6], where product ID is located in your case
    foreach($data as $product_id => $d){
        // if present here
        if(array_search($val, $d[6]) !== false){
            $result[$product_id] = $d;

            // we have a match, no need to loop more
            break;
        }
    }  
}