2

私は、Wordpress の PHP While コントロール構造に苦労しています。これが可能であることは間違いなく知っていますが、それを行う方法が正確にはわかりません。

Wordpress データベースを使用して、ウィジェット コントロールのフォーム フィールド データを保存しています。このコードでデータをループ処理したいと考えています。

need to control structure by the 2 numbers defined in my widget control.
$data['houses_row']
$data['shown_rows'] 

これが私がやろうとしていることです:

私は家について考えており、それぞれが類推として土地の区画にあります。並べ替え。

1 行に何軒の家を表示しますか? 表示する行数は?

行に処理できる数よりも多くの家がある場合、それらの家を非表示にする必要がありますが、これは自然に行うことができます。私は多くの家から多くの列を考えています。

誰かが私のループで私を助けてくれることを願っています。

    static $number_posts_shown = 1;
    static $per_row_count = 0;

    while ( have_posts() ) : the_post();        

        if ( $per_row_count <= $data['houses_row'] ): 
        echo "show house: #". $per_row_count ." ";                  

                   endif;
        $per_row_count++;

        // show rows            
        if ( $number_posts_shown <= $data['shown_rows'] ):           
            echo "<hr />";
        endif;
        $number_posts_shown++;                  

    endwhile;

shown_rows が 4 で、houses_row(houses per row) が 4 の場合、出力をこれにしたかったのです。

show house: #0 show house: #1 show house: #2 show house: #3 
--------------------------------------------------------------------------------
blank
--------------------------------------------------------------------------------
blank
--------------------------------------------------------------------------------
blank

shown_rows が 4 で、houses_row(houses per row) が 2 の場合、出力は次のようになります。

show house: #0 show house: #1 
--------------------------------------------------------------------------------
show house: #2 show house: #3 
--------------------------------------------------------------------------------
blank row
--------------------------------------------------------------------------------
blank row
4

1 に答える 1

0

あなたの質問から、次の形式に基づいて家 (wordpress の投稿に保存されている) を表示したいという考えが得られます。

$data['houses_row']
$data['shown_rows']

最も簡単な解決策は、最初に一時配列に既にあるものを格納することです。

$temporary_data = array();
while ( have_posts() ) : the_post();

    $temporary_data[] = $post;//retrieve current post object

endwhile;

すべての投稿データを取得したら、2 番目のループを開始してデータを生成します。

$current_house_counter = 0;
$available_slot = 0;
for($shown_row = 0; $shown_row < $data['shown_rows']; $shown_row++)
{
    for($house_row = 0; $house_row < $data['houses_row']; $house_row++)
    {
        if( isset($temporary_data[$current_house_counter]) )
        {
            echo "show house: #". ($current_house_counter + 1) ." ";
        }
        else
        {
            $available_slot++;
            echo "available slot #" . $available_slot . " ";
        }
        $current_house_counter++;
    }
    echo "<hr />";
}

現時点ではワードプレスをインストールしていないため、テスト用に次のコード スニペットを提供します。

$temporary_data[] = "data #1";
$temporary_data[] = "data #2";
$temporary_data[] = "data #3";
$temporary_data[] = "data #4";
$temporary_data[] = "data #5";

$data['houses_row'] = 3;
$data['shown_rows'] = 3;

$current_house_counter = 0;
$available_slot = 0;
for($shown_row = 0; $shown_row < $data['shown_rows']; $shown_row++)
{
    for($house_row = 0; $house_row < $data['houses_row']; $house_row++)
    {
        if( isset($temporary_data[$current_house_counter]) )
        {
            echo "show house: #". ($current_house_counter + 1) ." ";
        }
        else
        {
            $available_slot++;
            echo "available slot #" . $available_slot . " ";
        }
        $current_house_counter++;
    }
    echo "<hr />";
}

上記のコードの結果は次のとおりです。

show house: #1     show house: #2     show house: #3 <hr />
show house: #4     show house: #5     available slot #1 <hr />
available slot #2  available slot #3  available slot #4 <hr />
于 2012-04-11T02:42:02.207 に答える