programing

세 번째 게시물마다 루프를 다시 실행하시겠습니까? (Wordpress)

testmans 2023. 6. 24. 08:50
반응형

세 번째 게시물마다 루프를 다시 실행하시겠습니까? (Wordpress)

템플릿(워드 프레스)에 문제가 있습니다.저는 3개의 열이 포함되어 있고 (새 페이지를 건너뛰지 않고) 포트폴리오 페이지에 게시물을 표시할 수 있는 포트폴리오 페이지를 만들고 싶습니다.그리고 세 번째 게시물마다 이 세 개의 게시물을 반복해야 합니다.저는 중복 게시물에 "숨겨진" 클래스를 할당할 것이고, 열을 클릭하면 "차단"으로 설정됩니다.코드가 있습니다.

<?php get_header(); ?>
<section> <div class="container container-bazar container-gallery"><?php 
$array = array();
    $count = 0;
    $i = 0;
$args = array(
    'posts_per_page' =>  -1,
    'post_type' => 'gallery',
);
$gallery = new WP_Query( $args );
if($gallery->have_posts()) :
while($gallery->have_posts()) :
        $gallery->the_post(); ?>
<div class="col-1 boxes<?php if( $count%3 == 0 ) { echo '-1'; }; $count++; ?>">
    <div class="post" id="post-<?php the_ID(); ?>">
        <figure class="indent-bot">
            <a href="<?php the_permalink(); ?>" rel="nofollow">
                <?php the_post_thumbnail(array(380,220,true)); ?>
            </a>
        </figure>
        <div class="col-1-content">
            <strong class="title-3">
                <a href="<?php the_permalink(); ?>" rel="nofollow">
                    <?php the_title(); ?>
                </a>
            </strong>
            <div class="entry">
                <a href="<?php the_permalink(); ?>" rel="nofollow">
                    <?php the_excerpt(); ?>
                </a>
            </div><!-- .entry -->
        </div><!-- .col-1-content-->
    </div><!-- .post -->
</div> <!-- .boxes -->
<?php endwhile; ?>
<?php while($gallery->have_posts()) :
$gallery->the_post();?>
<?php $imgaddr1 = get_post_meta($post->ID, 'imgaddr1', true);
$imgaddr2 = get_post_meta($post->ID, 'imgaddr2', true);
$imgssilka1 = get_post_meta($post->ID, 'imgssilka1', true);
$imgssilka2 = get_post_meta($post->ID, 'imgssilka2', true);
$namecolor1 = get_post_meta($post->ID, 'namecolor1', true);
$namecolor2 = get_post_meta($post->ID, 'namecolor2', true);
$numbercolor1 = get_post_meta($post->ID, 'numbercolor1', true);
$numbercolor2 = get_post_meta($post->ID, 'numbercolor2', true); ?>
</div>
        <div class="full clearfix">
            <div class="inner">
                <figure class="indent-bot1">
                    <a href="<?php the_permalink(); ?>" rel="nofollow">
                        <?php the_post_thumbnail(array(960,690)); ?>
                    </a>
                </figure>
                <div class="row">
                    <div class="col-md-5">
                        <div class="inf-1">
                            <h4>Информация</h4>
                        </div>
                        <div class="inf-2">
                            <h5><?php the_title(); ?></h5>
                            <div class="desc">
                                <?php the_excerpt(); ?>
                            </div>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                    <div class="col-md-7 border-left">
                        <div class="inf-1">
                            <h4>Приложенные Цвета</h4>
                        </div>
                        <div class="inf-2">
                            <ul>
                                <li class="first-child">
                                    <a href="<?php echo $imgssilka1; ?>" class="img-block">
                                        <img src="<?php echo $imgaddr1; ?>">
                                    </a>
                                    <div class="txt">
                                        <strong><?php echo $namecolor1; ?></strong>
                                        <span><?php echo $numbercolor1; ?></span>
                                    </div>
                                </li>
                                <li class="last-child">
                                    <a href="<?php echo $imgssilka2; ?>" class="img-block">
                                        <img src="<?php echo $imgaddr2; ?>">
                                    </a>
                                    <div class="txt">
                                        <strong><?php echo $namecolor2; ?></strong>
                                        <span><?php echo $numbercolor2; ?></span>
                                    </div>
                                </li>
                            </ul>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                </div>
            </div><!-- .inner -->
        </div>
<div class="container container-bazar container-gallery">
<?php endwhile; 
else: 
endif; ?>
</div><!-- .container -->
</section>
<?php get_footer(); ?>

하지만 이 코드는 게시물을 순차적으로 표시합니다.

$i = 1;
//added before to ensure it gets opened
echo '<div>';
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // post stuff...

     // if multiple of 3 close div and open a new div
     if($i % 3 == 0) {echo '</div><div>';}

$i++; endwhile; endif;
//make sure open div is closed
echo '</div>';

이것은 제가 생각하게 만든 꽤 특이한 설정입니다.루프를 다시 실행하지 않는 방법이 있습니다.

방법은 다음과 같습니다.

  • 루프를 한 번만 실행하면 됩니다.기본 루프 대신 쿼리에서 게시물 배열을 꺼내 다음을 통해 게시물을 실행합니다.foreach루프. 여기서 우리는 일을 시작할 것입니다.

  • 게시 데이터가 포함된 블록 두 개를 얻을 수 있도록 컨텐츠를 분할해야 하며, 이를 나중에 사용할 어레이에 저장해야 합니다.이를 위해 두 개의 연결된 데이터 문자열(첫 번째 데이터 블록이 있는 문자열과 두 번째 데이터 블록이 있는 문자열)을 작성하여 두 개의 개별 변수에 저장합니다.

  • 이것이 완료되면, 우리는 각각 고유한 클래스를 가진 세 개의 게시물을 포함하는 게시물 블록을 형성하기 위해 우리의 div를 추가해야 합니다.이것은 두 문자열 집합 모두에 적용됩니다.

  • 이제 새 어레이 키를 계산하여 정렬된 게시 데이터의 새 어레이를 구축하여 문자열 1에서 세 개의 게시물로 구성된 게시물 데이터 블록, 문자열 2에서 세 개의 게시물로 구성된 게시물 데이터 블록 등의 순서를 지정할 수 있습니다.

  • 마지막으로, 우리의 게시물 배열이 여전히 혼합되어 있고 순서가 맞지 않기 때문에, 우리는 배열을 정렬하여 키가 숫자가 되도록 한 다음 마지막을 사용할 수 있습니다.foreach게시 데이터를 출력하는 루프

여기 코드가 있습니다.

코드를 게시하기 전에 한두 개의 메모만.

  • 필요에 맞게 클래스 등을 수정해야 합니다.

  • 코드가 완전히 테스트되지는 않았지만 div 블록 및 정렬이 예상대로 작동합니다.

  • 코드를 더 쉽게 따라할 수 있도록 주석을 달았습니다.

마지막으로, 코드는

$args = array(
    'posts_per_page' =>  -1,
    'post_type' => 'gallery',
);
$gallery = new WP_Query( $args );

// Check if we have posts before we continue
if( $gallery->have_posts() ) {

    // Use the array of posts and a foreach loop to build out super array
    foreach ( $gallery->posts as $key=>$post ) {
        // Setup postdata so we can make use of template tags
        setup_postdata( $post );

        // Setup/define our first variable which will hold our first set of post data
        $output = '';

        // Open a new div on the first post and every 3rd one there after to hold three posts
        if ( $key%3 == 0 ) {
            // We will call this class "first-x" where x represents the block count
            $output .= '<div class="first-' . floor( $key / 3 ) . '">';
        }

        // Concatenate your first loop into a string to our first variable $output
        $output .= '<div class="post" id="post-' . $post->ID . '">
                <figure class="indent-bot">
                    <a href="' . get_the_permalink() . '" rel="nofollow">
                        ' . get_the_post_thumbnail( $post->ID, array( 380,220,true ) ) . '
                    </a>
                </figure>
                <div class="col-1-content">
                    <strong class="title-3">
                        <a href="' . get_the_permalink() . '" rel="nofollow">
                            ' . get_the_title() . '
                        </a>
                    </strong>
                    <div class="entry">
                        <a href="' . get_the_permalink() . '" rel="nofollow">
                            ' . get_the_excerpt() . '
                        </a>
                    </div><!-- .entry -->
                </div><!-- .col-1-content-->
            </div><!-- .post -->
        </div> <!-- .boxes -->';

        // Add our closing div after every third post or the last post if there is less than three
        if ( $key%3 == 2 || !array_key_exists( ( $key + 1 ), $gallery->posts ) ) {
            $output .= '</div>';
        }

        // Create our new array of post data split in two and use with new array keys
        $new_posts_array[floor( $key / 3 ) * 3 + $key] = $output;

        // Setup/define our second variable which will hold the second set of post data from our posts
        // This is the set that you would like to hide
        $output_1 = '';

        // Open a new div on the first post and every 3rd one there after to hold three posts
        if ( ( $key%3 ) == 0 ) {
            // This block of posts will use class "second-x" where x represents the block count
            $output_1 .= '<div class="second-' . floor( $key / 3 ) . '">';
        }

        $imgaddr1     = get_post_meta( $post->ID, 'imgaddr1',     true );
        $imgaddr2     = get_post_meta( $post->ID, 'imgaddr2',     true );
        $imgssilka1   = get_post_meta( $post->ID, 'imgssilka1',   true );
        $imgssilka2   = get_post_meta( $post->ID, 'imgssilka2',   true );
        $namecolor1   = get_post_meta( $post->ID, 'namecolor1',   true );
        $namecolor2   = get_post_meta( $post->ID, 'namecolor2',   true );
        $numbercolor1 = get_post_meta( $post->ID, 'numbercolor1', true );
        $numbercolor2 = get_post_meta( $post->ID, 'numbercolor2', true ); 

        // Concatenate your second set of post data into a string to our second variable $output_1
        $output_1 .= '<div class="full clearfix">
            <div class="inner">
                <figure class="indent-bot1">
                    <a href="' . get_the_permalink() . '" rel="nofollow">
                        ' . get_the_post_thumbnail(  $post->ID, array( 960, 690 ) ) . '
                    </a>
                </figure>
                <div class="row">
                    <div class="col-md-5">
                        <div class="inf-1">
                            <h4>Информация</h4>
                        </div>
                        <div class="inf-2">
                            <h5>' . get_the_title() . '</h5>
                            <div class="desc">
                                ' . get_the_excerpt() . '
                            </div>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                    <div class="col-md-7 border-left">
                        <div class="inf-1">
                            <h4>Приложенные Цвета</h4>
                        </div>
                        <div class="inf-2">
                            <ul>
                                <li class="first-child">
                                    <a href="' . $imgssilka1 . '" class="img-block">
                                        <img src="' . $imgaddr1 . '">
                                    </a>
                                    <div class="txt">
                                        <strong>' . $namecolor1 . '</strong>
                                        <span>' . $numbercolor1 . '</span>
                                    </div>
                                </li>
                                <li class="last-child">
                                    <a href="' . $imgssilka2 . '" class="img-block">
                                        <img src="' . $imgaddr2 . '">
                                    </a>
                                    <div class="txt">
                                        <strong>' . $namecolor2 . '</strong>
                                        <span>' . $numbercolor2 . '</span>
                                    </div>
                                </li>
                            </ul>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                </div>
            </div><!-- .inner -->
        </div>';

        // Add our closing div after every third post or the last post if there is less than three
        if ( $key%3 == 2 || !array_key_exists( ( $key + 1 ), $gallery->posts ) ) {
            $output_1 .= '</div>';
        }

        // Create our new array of post data split in two and use with new array keys
        $new_posts_array[( floor( $key / 3 ) + 1 ) * 3 + $key] = $output_1;         


    }
    wp_reset_postdata();

    // Sort our new array so that the keys are numerical again
    ksort( $new_posts_array );

    // Run a foreach loop to output our posts as we need. No need to modify anything here
    foreach ( $new_posts_array as $v )
        echo $v;
}

우리 모두가 알고 있듯이 WordPress는 오픈 소스 도구이며 모든 플러그인을 사용하여 이러한 형식을 관리할 수 있습니다.

요구 사항을 관리하기 위해 플러그인과 함께 사용하는 것이 좋습니다.포맷된 출력에 열 플러그인을 사용했습니다.

저는 총 레코드 수를 받아서 루프를 만들었습니다.루프 안에서, 2사이클.첫 번째 루프는 테이블을 표시합니다.두 번째 사이클은 목록을 표시합니다.

<section>
<div class="container container-gallery">
    <?php 
        $offset = 0;
        $offset1 = 0;
        $i =0;
        $count = 0;
        $reset =0;
        $reset1 = 0;
        $args = array(
            'posts_per_page' =>  -1,
            'post_type' => 'gallery',
        );
        $gallery = new WP_Query( $args );
        $numberposts = $gallery->post_count;
    if ($numberposts){
            $id1=0;
            $id2=0;
            while($count < $numberposts){
            //          print_r($arr1);
            $count++;
            //echo "<h2>".$count."</h2>";
            $arr1 = array(
                'posts_per_page' =>  400,
                'post_type' => 'gallery',
                'offset'=>$offset
            );

            $arr2 = array(
                'posts_per_page' =>  400,
                'post_type' => 'gallery',
                'offset'=>$offset1
            );

            $loop1 = new WP_Query($arr1);
            $loop2 = new WP_Query($arr1);


                while($loop1->have_posts()) : $loop1->the_post(); 
                if ($reset<3) :
                    $reset++;               
    ?>
    <?php
        $colorfilter1 = get_post_meta($post->ID, 'checkboxwhite', true);
        $colorfilter2 = get_post_meta($post->ID, 'checkbox_beige', true);
        $colorfilter3 = get_post_meta($post->ID, 'checkbox_brown', true);
        $colorfilter4 = get_post_meta($post->ID, 'checkbox_gray', true);
        $colorfilter5 = get_post_meta($post->ID, 'checkbox_black', true);
        $colorfilter6 = get_post_meta($post->ID, 'checkbox_vvid', true);
        if ($colorfilter1 != "") $colorfilter1 ="white ";
        if ($colorfilter2 != "") $colorfilter2 ="beige ";
        if ($colorfilter3 != "") $colorfilter3 ="brown ";
        if ($colorfilter4 != "") $colorfilter4 ="gray ";
        if ($colorfilter5 != "") $colorfilter5 ="black ";
        if ($colorfilter6 != "") $colorfilter6 ="vivid ";
        $class_color = $colorfilter1.$colorfilter2.$colorfilter3.$colorfilter4.$colorfilter5.$colorfilter6;
    ?>
                <div class="col-1 mcol boxes<?php if( $i%3 == 0 ) { echo '-1'; }; $i++; echo ' '.$class_color;?>" id="colbox<?php echo $id1; $id1++;?>"  data-id="click" >
                    <div class="post" id="post-<?php the_ID(); ?>">
                        <figure class="indent-bot">

                                <?php the_post_thumbnail(array(380,220,true)); ?>

                        </figure>
                        <div class="col-1-content">
                            <strong class="title-3">

                                    <?php  the_title(); ?>

                            </strong>
                            <div class="entry">

                                    <?php the_excerpt(); ?>

                            </div><!-- .entry -->
                        </div><!-- .col-1-content-->
                    </div><!-- .post -->
                </div><!-- .boxes -->           
                <?php else : break;?>
                <?php endif; ?>
                <?php endwhile; ?>
                <?php
                    $reset = 0;
                    $offset +=3; 
                ?>  
                <?php wp_reset_postdata(); ?>

                <?php
                    while($loop2->have_posts()) : $loop2->the_post(); 
                    if ($reset1<3) :
                        $reset1++;  
                ?>
                <?php
                    $numbercolor1 = get_post_meta($post->ID, 'numbercolor1',true);
                    $numbercolor2 = get_post_meta($post->ID, 'numbercolor2', true);
                    $imgaddr1 = get_post_meta($post->ID, 'imgaddr1', true);
                    $imgaddr2 = get_post_meta($post->ID, 'imgaddr2', true);
                    $imgssilka1 = get_post_meta($post->ID, 'imgssilka1', true);
                    $imgssilka2 = get_post_meta($post->ID, 'imgssilka2', true);
                    $namecolor1 = get_post_meta($post->ID, 'namecolor1', true);
                    $namecolor2 = get_post_meta($post->ID, 'namecolor2', true);
                ?>
                </div>
                        <div class="full clearfix active colbox<?php echo $id2; $id2++;?>" id="">
                            <div class="inner">
                                <figure class="indent-bot1">
                                    <a href="<?php the_permalink(); ?>" rel="nofollow">
                                        <?php the_post_thumbnail(array(960,690)); ?>
                                    </a>
                                </figure>
                                <div class="row">
                                    <div class="col-md-5">
                                        <div class="inf-1">
                                            <h4>Информация</h4>
                                        </div>
                                        <div class="inf-2">
                                            <h5><?php the_title(); ?></h5>
                                            <div class="desc">
                                                <?php the_excerpt(); ?>
                                            </div>
                                        </div>
                                        <div class="clearfix"></div>
                                    </div>
                                    <div class="col-md-7 border-left">
                                        <div class="inf-1">
                                            <h4>Приложенные<</h4>
                                        </div>
                                        <div class="inf-2">
                                            <ul>
                                                <li class="first-child">
                                                    <a href="<?php echo $imgssilka1; ?>" class="img-block">
                                                        <img src="<?php echo $imgaddr1; ?>">
                                                    </a>
                                                    <div class="txt">
                                                        <strong><?php echo $namecolor1; ?></strong>
                                                        <span><?php echo $numbercolor1; ?></span>
                                                    </div>
                                                </li>
                                                <li class="last-child">
                                                    <a href="<?php echo $imgssilka2; ?>" class="img-block">
                                                        <img src="<?php echo $imgaddr2; ?>">
                                                    </a>
                                                    <div class="txt">
                                                        <strong><?php echo $namecolor2; ?></strong>
                                                        <span><?php echo $numbercolor2; ?></span>
                                                    </div>
                                                </li>
                                            </ul>
                                        </div>
                                        <div class="clearfix"></div>
                                    </div>
                                </div>
                                <div class="row">
                                        <div class="col-md-12">
                                            <div class="c_btn"></div>
                                        </div>
                                    </div>
                            </div><!-- .inner -->
                        </div>
                <div class="container container-gallery">
                <?php else : break;?>
                <?php endif; ?>
                <?php endwhile; ?>
                <?php
                    $reset1 = 0;
                    $offset1 +=3; 
                ?>
                <?php wp_reset_postdata(); ?>

    <?php 

        } //end if ($count <= $numberposts)
    } //end if ($numberposts)
    ?>

    <?php 
    if ( have_posts() ) while ( have_posts() ) : the_post(); // старт цикла ?>
    <article id="post-<?php the_ID(); ?>"> 
        <?php the_content();  ?>
    </article>
<?php endwhile;  ?>
</div><!-- .container -->
</section>

언급URL : https://stackoverflow.com/questions/30702175/rerun-loop-after-every-third-post-wordpress

반응형