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(). 如果要在确定是否要回显之前将 Post 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>

另外,感谢您使用 WP_Query 而不是 query_posts。

编辑:

我添加了一个条件来确定是否需要编写网格 div 和标题。不过,总的来说,您的代码非常可靠。

于 2013-03-14T14:52:07.380 回答