WordPress:按Megabyte / Gigabyte名称值排序自定义分类

时间:2012-04-02 22:17:33

标签: php wordpress sorting taxonomy usort

基本上我正在为USB驱动器制造商的网站工作。我使用自定义分类法来表示该公司提供的每个USB驱动器的内存大小。以下是WordPress如何输出我的条款...

$terms = get_the_terms($post->ID, 'usb_mem');

if ($terms) {
 foreach ($terms as $taxindex => $taxitem) {

     echo '<span class="product_terms">' . $taxitem->name . '</span>';

 }
}

-16GB
-1GB
-256MB
-2GB
-32GB
-4GB
-512MB
-8GB

我需要WordPress按实际数据大小对它们进行排序,而不仅仅是数字。理想情况下是这样的:

-256MB
-512MB
-1GB
-2GB
-4GB
-8GB
-16GB
-32GB

提前致谢! :d

1 个答案:

答案 0 :(得分:1)

请注意,所有此代码都是内联的。你最好的选择:

  • 在导入时规范化大小,这可以避免大部分混乱。
  • 构建一个类来处理所有这些。

任何方式,这是适当的代码。

// This is our lookup table to deal with strings.
$size_lookups = array('GB'=>pow(2,30), 'MB'=>pow(2,20), 'KB'=>pow(2,10), 'TB'=>pow(2,40));

// First, normalize all of the fields.
foreach ($terms as $taxitem)
{
   $taxitem->fixed_size = intval($taxitem->size,10);
   foreach ($size_lookups as $sizekey=>$sizemod)
   {
      if (strripos($taxitem->size, $sizekey))
      {
          $taxitem->fixed_size = intval($taxitem->size, 10) * $sizemod;
          break;
      }
   }
}

// Set up a sorting function.
function sortBySize($a, $b)
{
    return $b->fixed_size - $a->fixed_size;
}

// Do the sort.
$sorted = array_values($terms); // set up a shadow copy with new indexes.
usort ($sorted , 'sortBySize' );

// Display the results.
foreach ($sorted as $taxitem) {
    echo '<span class="product_terms">' . $taxitem->name . '</span>';
}