2012-04-02 13 views
0

Im Grunde genommen bin ich auf einer Website für einen USB-Stick Hersteller arbeiten. Ich habe eine benutzerdefinierte Taxonomie verwendet, um die Speichergrößen für jedes USB-Laufwerk dieses Unternehmens darzustellen. Hier ist, wie Wordpress meine Begriffe gibt ...Wordpress: Sort benutzerdefinierte Taxonomie von Megabyte/Gigabyte Name Wert

$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

Ich brauche WordPress, um sie nach der tatsächlichen Datengröße zu sortieren, nicht nur numerisch. Im Idealfall etwas wie folgt aus:

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

Vielen Dank im Voraus! : D

+0

Ich bin nicht gewohnt mit PHP und verwandten Sachen, aber warum nicht zu teilen Namen und erweitern MB, GB zu 2^20, 2^30 Bytes bzw. vergleichen Byte-Werte dann. –

Antwort

1

Beachten Sie, dass alle dieser Code inline ist. Sie sind besser dran:

  • Normalisierung der Größe beim Import, die meisten dieser Unordnung beseitigt.
  • Konstruieren einer Klasse, um all dies zu behandeln.

Alle die Art und Weise, hier ist der entsprechende Code.

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

Vielen Dank! Ich habe es nur ein wenig modifiziert, damit es perfekt funktioniert: '// Richten Sie eine Sortierfunktion ein. Funktion sortBySize ($ a, $ b) { if ($ a-> fixed_size == $ b-> fixed_size) { Rückgabe 0; } return ($ a-> fixed_size < $b-> fixed_size)? -1: 1; } ' –

+0

Ich bin froh, dass Sie mit der Antwort zufrieden waren. Ich werde sagen, dass die extra-komplexe Sortierung in diesem Fall unnötig ist, da fixed_size bereits auf ein int normalisiert ist, obwohl intval. Könnte aber in beide Richtungen gehen, da das Sortieren von allem außer einem int eine Funktion wie Ihre verwenden sollte. –

Verwandte Themen