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

Php Wordpress自定义Post循环-如何不从我不知道的数组打印信息';你不需要吗?,php,wordpress,Php,Wordpress,使用插件自定义内容类型管理器创建显示位置信息的自定义帖子。 我们每周为每个地点举办一次比赛,所以我想做的是在我的自定义帖子中,我有一组复选框,所以你可以检查场地是在周一、周二还是周三……等等,然后在我的主题中,我将有一个7天的日历。如果那天选中了某个位置,那么我希望该位置的标题/链接打印在那里 我给你们这些背景知识是因为我真的不认为我的方法是正确的。基本上,我是在循环中完成的,我在一个数组中拉取所有复选框选项,如果该选项等于该特定日期的星期一,那么它将打印位置标题名称等。 我想要这个设置,这样一

使用插件自定义内容类型管理器创建显示位置信息的自定义帖子。 我们每周为每个地点举办一次比赛,所以我想做的是在我的自定义帖子中,我有一组复选框,所以你可以检查场地是在周一、周二还是周三……等等,然后在我的主题中,我将有一个7天的日历。如果那天选中了某个位置,那么我希望该位置的标题/链接打印在那里

我给你们这些背景知识是因为我真的不认为我的方法是正确的。基本上,我是在循环中完成的,我在一个数组中拉取所有复选框选项,如果该选项等于该特定日期的星期一,那么它将打印位置标题名称等。 我想要这个设置,这样一个非技术人员(有点像我lol)就可以添加一个新的位置并选择“friday”,例如,代码完成其余部分。 基本上我让它工作了。但有两个问题

  • 我正在运行7个循环来完成这个任务-每天一个。我知道这很愚蠢,可能有更好的解决办法

  • 它正在打印正确的信息-但是它也在读取/打印每个其他位置,除了它没有为他们提供信息-我知道这会导致它为他们创建空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();
    
    $weekly=新的WP\u查询(数组('post\u type'=>'位置','posts\u per\u page'=>5));
    而($weekly->have_posts()):$weekly->the_post();
    $day_array=获取_自定义_字段('weekly_day:to_array');
    if(在数组中('3',$day\u数组)){
    打印自定义字段(“场馆显示名称”);
    回声“
    ”; 打印自定义字段(“城市十字路口”); } 结束时; wp_reset_postdata();
    in_数组语句中的'3'仅表示“星期三”

    请看这张图片: 创建空div的一个示例-通过对div应用填充很容易看到


    谢谢你的阅读。任何不同方法的解决方案都会很好。

    我不确定我是否正确理解了您的需求,但假设我理解了,我认为您的整个方法有点错误/复杂

    首先,您不需要7个循环

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

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

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

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

    虽然仍然认为该方法有点错误,但不知道您是如何构造数据的,但我将解决眼前的问题:

    代码创建空div仅仅是因为您告诉它。 在输出div之前,您正在代码中使用
    WHILE
    条件。 由于您的查询得到5个post,它将创建5个div(其中一些不满足下一个条件的div当然是空的)

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

     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; ?>
    
    
    //现在我们打开一个div
    //现在,我们检查其他条件并打印它们(如果可用)。
    //现在,我们关闭该分区
    
    谢谢您的回答。是的,我知道我正在以一种复杂的、不必要的方式处理它,但我正在学习。哈哈,是的,问题是对于我的自定义“位置”帖子来说,很多位置都是在多天内播放的。例如,一个地点将在周一和周六举行活动。所以我需要能够选择多天,代码将正确地放置它们。。。我会试着用GET方法来搞乱。谢谢有没有简单的例子说明我是如何根据这个值得到这些帖子的?