0

WordPressにカレンダーのカスタム投稿タイプがあります。テンプレートでは正常に機能していますが、ループを実行するためのより良い方法があることはわかっています。その月(1月、2月、3月など)にカスタム分類法を使用し、ページ上の投稿を月ごとに並べ替えています。現時点では、必要な機能を取得するために12の個別のループを実行する必要があることを意味しますが、これは正しい方法ではないと確信しています。

これが私が使っているコードです、どんな助けでも大歓迎です。ありがとう!

<div class="module">
<h2>January</h2>
<?php // Annual Events Posts
$calendar = new WP_Query('post_type=calendar&month=January'); 
while($calendar->have_posts()) : $calendar->the_post(); 
?>              
<div class="grid" style="background:none">

<div class="col-1">
    <h3>
        <?php 
            the_title();
        ?>
    </h3>
    <h4>
        <?php 
            $dateValue = get_post_meta( $post->ID, 'rhc_when', true );
            if($dateValue != '') {
                echo $dateValue;
            }; 
            $timeValue = get_post_meta( $post->ID, 'rhc_time', true );
            if($timeValue != '') { ?>, <?php
                echo $timeValue;
            }
         ?>                         
    </h4>
    <?php $content = the_content(); 
        if( $content !='') {
            echo $content;
        };
    ?>
</div>
</div>
<?php 
    endwhile;
    wp_reset_postdata();
?>
<hr>
<h2>February</h2>
<?php // Annual Events Posts
    $calendar = new WP_Query('post_type=calendar&month=February');
    while($calendar->have_posts()) : $calendar->the_post(); 
?>              
<div class="grid" style="background:none"> 
    <div class="col-1">
        <h3>
            <?php 
                the_title();
            ?>
        </h3>
        <h4>
            <?php 
                $dateValue = get_post_meta( $post->ID, 'rhc_when', true );
                if($dateValue != '') {
                    echo $dateValue;
                }; 
                $timeValue = get_post_meta( $post->ID, 'rhc_time', true );
                if($timeValue != '') { ?>, <?php
                    echo $timeValue;
                }
            ?>                          
        </h4>
        <?php $content = the_content(); 
            if( $content !='') {
                echo $content;
            };
        ?>
    </div>
</div>
<?php 
    endwhile;
    wp_reset_postdata();
?>
4

1 に答える 1

1

私が考えることができる唯一のことは間違っていると思うのはあなたの使用ですthe_content()。エコーするかどうかを決定する前に投稿コンテンツを変数に設定する場合は、get_the_contentを使用する必要があります。それを除けば、すべてが大丈夫ですが、私はそれをもう少し凝縮します:

<div class="module">
<?php
// Annual Events Posts
$months = array(
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
);
foreach($months as $month){
    $calendar = new WP_Query('post_type=calendar&month='.$month); 
    if($calendar->have_posts()) :
    ?>
    <h2><?php echo $month; ?></h2>
    <div class="grid" style="background:none">
    while($calendar->have_posts()) : $calendar->the_post(); 
    ?>
        <div class="col-1">
            <h3><?php the_title(); ?></h3>
            <h4>
            <?php 
            if($dateValue = get_post_meta( $post->ID, 'rhc_when', true ))
                echo "$dateValue, ";
            if($timeValue = get_post_meta( $post->ID, 'rhc_time', true ))
                echo $timeValue;
            ?>                         
            </h4>
            <?php
            if($content = get_the_content())
                echo $content;
            ?>
        </div>
    <?php 
    endwhile;
    ?>
    </div>
    <hr>
    <?php
    endif;
    wp_reset_postdata();
}
?>
</div>

また、query_postsではなくWP_Queryを使用していただきありがとうございます。

編集:

グリッドdivと見出しを書き込む必要があるかどうかを判断するための条件を追加しました。ただし、全体として、コードはかなり堅実です。

于 2013-03-14T14:52:07.380 に答える