Wordpress自定义Post循环-如何不从我不打印的数组打印信息';我不需要


Wordpress Custom Post Loop - How to not print information from an Array that I don't need?

一直在使用插件Custom Content Type Manager创建显示位置信息的自定义帖子。我们每周在每个地点举行比赛-所以我想做的是在我的自定义帖子中,我有一组复选框,所以你可以检查场地是在周一、周二还是周三。。。等等。然后在我的主题中,我将有一个7天的日历。如果当天检查了一个位置,那么我希望在那里打印到该位置的标题/链接。

我给你这个背景是因为我真的认为我做这件事的方式不对。从本质上讲,我是在一个循环中进行操作的,我提取数组中的所有复选框选项,如果该选项等于特定日期的星期一,那么它会打印位置标题名称等。我想要这个设置,这样一个非技术人员(有点像我,哈哈)就可以添加一个新的位置,然后选择"星期五",剩下的代码就完成了。从本质上讲,我做到了。存在2个问题

  1. 我正在运行7个循环来完成这一任务——每天一个。我知道这很愚蠢,可能还有更好的解决方案。

  2. 它正在打印正确的信息——然而,它也在读取/打印其他每个位置,除了没有为它们提供信息——我知道这是因为它为它们创建了空的DIV。

注意:我在发布整个代码时遇到问题。。。??我删除了所有的php标签来展示这个

$weekly = new WP_Query( array( 'post_type' => 'locations', 'posts_per_page' => 5 ) );
while ( $weekly->have_posts() ) : $weekly->the_post();
<div class="weekly-venue-spacer"> 
$day_array = get_custom_field('weekly_day:to_array'); 
if (in_array('3', $day_array)) {
print_custom_field('venue_display_name');
echo "<br />";
print_custom_field('city_crossroads');  
}
</div>
endwhile;
wp_reset_postdata();

in_array语句中的"3"只是表示"星期三"。

下面看看这张图片:http://i40.tinypic.com/svnee0.jpg正在创建的空div的示例-很容易看到对div 应用填充

感谢阅读。任何以不同方式处理这一问题的解决方案都是很棒的。

我不确定我是否正确理解了你想要的东西,但假设我理解了——我认为你的整个方法有点错误/复杂。

首先,您不需要7个循环。

我注意到有一个自定义字段,所以在该自定义字段中,而不是数组,只需存储所需的一天,然后通过检查custom_field值即可获取。。

第二,为什么你用支票簿而不是清单?有没有可能在几天内发生的最终事件?因为如果每个事件都是独占的一天,那么使用下拉列表甚至单选按钮会更容易。

对于您的直接问题-我不知道自定义字段的值是如何构造的-但您正在打印所有值。。

编辑一:阅读评论并更好地理解问题后-

虽然我仍然认为这种方法有点错误,但不知道你是如何构建数据的——我将立即解决这个问题:

代码创建空的DIVS只是因为您告诉它。您在代码BEFORE中使用WHILE条件来输出div。由于您的查询得到5个posts,它将创建5个div(其中一些不符合NEXT条件,当然是空的)。

现在,用人类的话来说,你的功能是这样工作的:

 1. Get 5 post. 
 2. As long as I have posts (for each post), Open a div. 
 3. If you have Tuesday in array - print something
 4. close div
 5. if not finished all posts (in our case, 5) - go back to step 2. 

很明显,代码也会为空事件打印空div。。

因此,只需将打开的div标记移动到WHILE条件之前即可。

也就是说,如果您不需要检查查询中是否存在事件。。

正确的方法是也使用IF语句,就像常规的wordpress循环一样。

一般机制是:

   <?php if ($weekly->have_posts()) : ?>
//now we open a div
               <?php while ( $weekly->have_posts() ) : $weekly->the_post();?> 
     // now we check for other conditions and print them if available.
               <?php endwhile; ?>
// now we close the DIV
     <?php endif; ?>