1

自分のサイトのすべての投稿を取得するwhileループを実行しています

while ( $all_query->have_posts() ) : $all_query->the_post();

それぞれにメタデータがあり、それを試してみる必要があります。これはと呼ばれるフィールド'rate'であり、1〜5のような値をマージする必要があります。

現在、私はこれを持っています

while ( $all_query->have_posts() ) : $all_query->the_post();
    $fives = 0;
    $fours = 0;
    $threes = 0;
    $twos = 0;
    $ones = 0;
    if(get_post_meta($post->ID, 'rate', true) == 'five') { 
        $fives = $fives + 5;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'four') { 
        $fours = $fours + 4;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'three') { 
        $threes = $threes + 3;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'two') { 
        $twos = $twos + 2;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'one') { 
        $ones = $ones + 1;
    }
    endwhile;

それは機能しますが、それは本当にひどいです。

このようなことを行うためのより最適化されたクリーンな方法はありますか?

4

1 に答える 1

4

配列を少し操作するだけで、これを大幅に簡素化できます。

$counts = array_fill(1, 5, 0);
$labels = array(1 => 'one', 'two', 'three', 'four', 'five');

while(...) {
    $index = array_search(get_post_meta($post->ID, 'rate', true), $labels);
    $counts[$index] += $index;
}

合計は、1の合計である内部$countsに保持され$counts[1]ます。$labelsテキスト表現を内部の配列位置と一致させるのに役立つものがあります-これはもちろん、代わりに$countsプレーンを使用して行うことができます。switch

ループはarray_search、テキスト表現を配列インデックスに変換するために使用し、次に、対応するカウントをインデックスに等しい量だけインクリメントします。

もちろん、プロダクションコードは、がarray_search返される可能性も考慮に入れる必要がありますfalse

于 2013-01-17T23:43:59.080 に答える