Php 如何在while循环中执行if语句,反之亦然

Php 如何在while循环中执行if语句,反之亦然,php,wordpress,events,if-statement,while-loop,Php,Wordpress,Events,If Statement,While Loop,我正在为wordpress开发Events Calendar Pro插件,我需要一些帮助。我认为这很简单,但我想不出来 基本上,我可以为每个事件添加一个附加字段。我想检查该字段是否已设置,如果已设置,则我希望该特定事件显示在主页上 我试图以某种方式将我在另一个站点的主页模板上所做的代码与插件小部件文件混合在一起 以下是我尝试使用的代码: <?php $query_str = "SELECT distinct wposts.ID FROM $wpdb->posts wposts, $w

我正在为wordpress开发Events Calendar Pro插件,我需要一些帮助。我认为这很简单,但我想不出来

基本上,我可以为每个事件添加一个附加字段。我想检查该字段是否已设置,如果已设置,则我希望该特定事件显示在主页上

我试图以某种方式将我在另一个站点的主页模板上所做的代码与插件小部件文件混合在一起

以下是我尝试使用的代码:

<?php
$query_str = "SELECT distinct wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id  AND wpostmeta.meta_key = '_EventStartDate' 
AND wposts.post_type = 'tribe_events' ORDER BY wpostmeta.meta_value ASC ";
$posts = $wpdb->get_results( $query_str );
foreach($posts as $post){
    setup_postdata($post);
    $id=get_the_ID();
    $linkr=get_post_meta($id,'_ecp_custom_3',true);

    date_default_timezone_set('America/Los_Angeles');
    $todayDate = date("Y-m-d H:i:s");
    $eventDate=get_post_meta($id,'_EventEndDate', "Y-m-d H:i:s");

    if ((strtolower($linkr)=='yes') && ($eventDate >= $todayDate)) {
        $link=get_permalink($id);
        echo "<li><a href='{$link}' title=''>";
        the_post_thumbnail();
        echo "</a></li>";
    }
}?>

不太确定您需要什么,但最佳猜测如下

<?php
$events = new wp_query(//is this present in your code?--if not $events has no posts. 
);
?>

<div class="tribe-venue-widget-wrapper">
<ul>

<?php while ( $events->have_posts() ):
    $events->the_post();



        $showOnHomepage=get_post_meta($post->ID,'_ecp_custom_4',true);
        $eventDate=get_post_meta($post->ID,'_EventEndDate', true); //boolan here you can change formats after if you want -- true= single result false = multiple if exist

        if (($showOnHomepage == 'Yes') && ($eventDate >= $todayDate)) {
            $link=get_permalink();
            echo "<li><a href='{$link}' title=''>";
            the_post_thumbnail('medium');
            echo "</a></li>";
        }
    }
   endwhile; 
   ?>


FYI,您不需要每次通过循环都设置默认时区。只需在循环之前设置一次。同样的,
$todayDate
——它不会改变。哦,把它放在循环之外……明白了。我不知道你要什么。您要测试的附加字段是什么?设置该字段时,您希望显示什么?我甚至不知道这两个代码块是如何关联的——第一个是处理数据库结果,第二个是使用名为
$events
的东西。也许对了解WordPress的人来说,这是有意义的,我添加了标记。是的,这两个代码块并不完全相关,但它们在某种程度上做了相同的事情。我把最上面的一个放在我的主页模板中,这样它就可以在数据库中搜索带有post类型tribe events的事件。第二个是事件插件中已经存在的代码。因此,它没有使用$post,而是使用$events,我不知道如何让它工作。基本上我是想检查一下,ecp自定义3是否设置为“是”。如果是,则仅以列表顺序显示这些事件。这就是我不明白如何将其合并到上面的第二段代码中的部分。谢谢!我对这一切都很陌生。我应该在wp_query()中输入什么?你能给我举个例子吗?没问题,有很多选项,例如帖子类型、元查询、分类查询等。请查看所有选项的链接,但如果你只想查看所有帖子
wp\u查询('post\u type'=>'post')。。。。非常感谢你,今天我回去做那个项目的时候我会试试的。
<div class="tribe-venue-widget-wrapper">
<ul>
<?php while ( $events->have_posts() ): ?>
    <?php $events->the_post();
        foreach($events as $event){
            setup_postdata($event);
            $id=get_the_ID();
            $showOnHomepage=get_post_meta($id,'_ecp_custom_4',true);
            $eventDate=get_post_meta($id,'_EventEndDate', "Y-m-d H:i:s");

            if (($showOnHomepage == 'Yes') && ($eventDate >= $todayDate)) {
                $link=get_permalink($id);
                echo "<li><a href='{$link}' title=''>";
                the_post_thumbnail('medium');
                echo "</a></li>";
            }
        }
    ?>
<?php endwhile; ?>
<div style="clear:both"></div>
</ul>
<?php
$events = new wp_query(//is this present in your code?--if not $events has no posts. 
);
?>

<div class="tribe-venue-widget-wrapper">
<ul>

<?php while ( $events->have_posts() ):
    $events->the_post();



        $showOnHomepage=get_post_meta($post->ID,'_ecp_custom_4',true);
        $eventDate=get_post_meta($post->ID,'_EventEndDate', true); //boolan here you can change formats after if you want -- true= single result false = multiple if exist

        if (($showOnHomepage == 'Yes') && ($eventDate >= $todayDate)) {
            $link=get_permalink();
            echo "<li><a href='{$link}' title=''>";
            the_post_thumbnail('medium');
            echo "</a></li>";
        }
    }
   endwhile; 
   ?>