WordPress:按兆字节/千兆字节名称值排序自定义分类法


WordPress: Sort custom taxonomy by Megabyte / Gigabyte name value

基本上我正在为一家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

请注意,所有这些代码都是内联的。你过得更好:
  • 导入时对大小进行规范化,从而避免了大部分混乱
  • 构造一个类来处理所有这些

不管怎样,这里都有合适的代码。

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