WordPress: сортировка пользовательских таксономий по значению имени в мегабайтах / гигабайтах - PullRequest
0 голосов
/ 03 апреля 2012

В основном я работаю над сайтом для производителя 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>';

 }
}

-16 ГБ
-1 ГБ
-256MB
-2 ГБ
-32ГБ
-4GB
-512 МБ
-8GB

Мне нужно, чтобы WordPress сортировал их по фактическому размеру данных, а не только по количеству. В идеале примерно так:

-256МБ
-512 МБ
-1 ГБ
-2 ГБ
-4GB
-8GB
-16GB
-32 ГБ

Заранее спасибо! : D

1 Ответ

1 голос
/ 03 апреля 2012

Обратите внимание, что весь этот код встроен. Вам лучше:

  • Нормализация размера при импорте, что устраняет большую часть этого беспорядка.
  • Создание класса для всего этого.

В любом случае, вот соответствующий код.

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