0

カスタムフィールドでWP_Queryを並べ替えようとしています。カスタムフィールドには、「E100」、「E500」、「E123b」などの文字列が含まれます。これらの値を数値で並べ替えます。つまり、文字がないかのようにカスタムフィールドで並べ替えます。

私のクエリは次のようになります。

$subpages = new WP_Query(array(
    "post_type" => "page",
    "meta_key" => "[customFieldNameHere]",
    "orderby" => "meta_value_num",
    "order" => "ASC",
    "posts_per_page" => 5000
));

しかし、それは機能しません。ある種のことをしますが、数値ではありません。フィールドからすべての文字/文字を削除してから、残りの値を数値で並べ替えることはできますか、それともこれを解決する他の方法がありますか?

4

2 に答える 2

0

文字列をすべて数字のように並べ替えることはできません。試してみると、英数字で並べ替えられます。アルファベット順の場合とほぼ同じですが、最初のすべての文字と一致し、次に2番目の文字と一致するため、数字が奇妙に見えます。 :

  • 1
  • 10
  • 101
  • 2
  • 20

MySQLに組み込まれている、あなたが望むことを実行するものは何も知りませんしWP_Query、そのような機能もありません。私が持っている最善の解決策は、結果をソートせずにプルし、後でソートすることです。データベースが余分な作業を行わないように、ソートせずにプルする必要があります。

$subpages = new WP_Query(array(
    "post_type" => "page",
    "meta_key" => "[customFieldNameHere]",
    "posts_per_page" => 5000
));

$sorted = array();
foreach ($subpages as $s) {
  $kname = preg_replace('/[^0-9]+/','',$s->customFieldNameHere]);
  $sorted[$kname] = $s;
}
// you may need
// ksort($sorted); 
var_dump($sorted);

1つの問題は衝突です。2つの一致が発生した$knames場合、データが破壊されます。率直に言って、データが多い場合は、それが発生する可能性が非常に高くなります。

于 2013-01-30T15:32:54.703 に答える
0

最終的に、すべての文字列から先頭のEを削除しました。文字列の数値ソートでは元の問題を実際には解決しませんが、少なくとも現在は機能しています。

于 2013-01-31T08:48:33.833 に答える