web-dev-qa-db-ja.com

ページテンプレートのカスタムフィールドをループする方法

私はもともと単一のフィールドを使用していました、そして、物事は以下のコードで完全に働きました。今、私はそれを似たようないくつかのフィールドのループに変更する必要があります。

はじめに:私は自分のページにいくつかのカスタムフィールド(slide1、slide2、slide3)を作成しました。これらのフィールドには画像の場所のURLが含まれています。次にいくつかのテキストフィールド(slide1_text、slide2_textなど)を作成しました。

コード的には、私は自分のテンプレートのフィールドを次のように引っ張っていました。

<?php
    // check for slide
    $slide = get_post_meta($post->ID, 'slide1', $single = true);
    // check for slide text
    $thumb_text = get_post_meta($post->ID, 'slide1_label', $single = true);
    // if there's a slide
    if($slide !== '') { ?>
    <section class="carousel slide" data-ride="carousel">
        <div class="carousel-inner">
            <div class="item active">
                <img src="<?php echo $slide; ?>" class="slider-images" />
            </div>
            <div class="carousel-caption">
                <h2><?php if($slide_text !== '') { echo $slide_text; } else { echo the_title(); } ?></h2>
            </div>
        </div>
    </section>
    <?php } // end if statement
?>

基本的にはslide1という名前のフィールドがあるかどうかをチェックし、もしあればそれを表示します。ループの追加についてはあまりよくわかりませんが、ここでの最終目標はブートストラップカルーセル用にフォーマットされたフィールドを返すことです。 (私はプラグインがあることを知っていますが、私はカップルを試してみました、そして、それらはまさに私が欲しいものではありません。)

Slide *というタイトルのフィールドがあるかどうかをチェックして確認できるように、このコードを変更してループを含めるにはどうすればよいですか。

さらに、<div class="item active">の下のコードでわかるように、最初のスライドのクラスが "active"であることを確認できれば、他のすべてのフィールドはclass = itemになるはずです。

1
o_O

これを試して最大4枚のスライドをループさせ、それぞれが有効なスライドであることを確認します。

<?php
    $max_slides = 4; // this should be the maximum number of slides there can be

    for ($i=1; $i<=$max_slides; $i++) { 
        // check for slide
        $key = 'slide' . $i; 
        $slide = get_post_meta($post->ID, $key, $single = true);
        // check for slide text
        $thumb_text = get_post_meta($post->ID, $key . '_label', $single = true);
        // if there's a slide
        if($slide !== '') { ?>
            <section class="carousel slide" data-ride="carousel">
                <div class="carousel-inner">
                    <div class="item active">
                        <img src="<?php echo $slide; ?>" class="slider-images" />
                    </div>
                    <div class="carousel-caption">
                        <h2><?php if($slide_text !== '') { echo $slide_text; } else { echo the_title(); } ?></h2>
                    </div>
                </div>
            </section>
        <?php } // end if statement
    } 
?>

$max_slidesを変更して4つ以上にすることができます

2
Aric Watson