当参数是数组时,从WordPress循环中排除帖子

时间:2014-07-24 08:39:39

标签: php wordpress

在WordPress中,我有以下代码,根据我已应用于帖子的自定义元数据呈现帖子。基本上,如果用户在帖子中打勾,赞助商是主赞助商或银赞助商(自定义帖子称为赞助商),它将添加元数据' _url_premium'或者' _silver_sponsor_silver'取决于赞助商类型。

然后我将这些帖子(即赞助商)呈现如下:

<?php  $args = array(
                    'post_type'=>'sponsor',
                    'posts_per_page'=>-1);

        query_posts($args);

        if( have_posts() ) : while( have_posts() ) : the_post();

            $image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' );
            $image_w = $image[1];
            $image_h = $image[2];
            $image = $image[0];
            $postmeta = get_post_custom();

            if( has_post_thumbnail()  && !empty($postmeta['_url_premium'][0]) ) : ?>

                <div class="sponsorbox2 grid-parent">
                    <h3 class="sidetitle grid-100">Lead Sponsor</h3>
                    <a href="<?php the_permalink(); ?>" class="grid-50 prefix-50 mobile-grid-100"><img src="<?php echo $image; ?>" alt="<?php echo get_the_title(); ?>" ></a>
                </div>

                <div class="clear"></div>

                <?php $leadsponsor = $post->ID; ?>

            <?php endif; ?>
        <?php endwhile; endif; wp_reset_query(); ?>
                <div class="sponsorbox2 grid-parent">
                    <h3 class="sidetitle grid-100">Silver Sponsors</h3>

    <?php $args = array(
                    'post_type'=>'sponsor',
                    'posts_per_page'=>-1);

        query_posts($args);

        if( have_posts() ) : while( have_posts() ) : the_post();

            $image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' );
            $image_w = $image[1];
            $image_h = $image[2];
            $image = $image[0];
            $postmeta = get_post_custom();

            if( has_post_thumbnail()  && !empty($postmeta['_silver_sponsor_silver'][0]) ) : ?>


                    <a href="<?php the_permalink(); ?>" class="grid-50 prefix-50 mobile-grid-100"><img src="<?php echo $image; ?>" alt="<?php echo get_the_title(); ?>" ></a>
                </div>

                <div class="clear"></div>

                <?php $silversponsor = $post->ID; ?>

然后我使用以下内容呈现不包含元数据的所有其他帖子(即赞助商)

            
        <div class="sponsorbox grid-parent">

            <?php if(!empty($leadsponsor) && !empty($silversponsor)) : ?>

                <h3 class="sidetitle grid-100">Our other Sponsors</h3>

            <?php else : ?>

                <h3 class="sidetitle grid-100">Our Sponsors</h3>

            <?php endif; ?>

            <!-- logos should be grid-30 and mobile-grid-25 -->
            <?php  $args = array(
                            'post_type'=>'sponsor',
                            'posts_per_page'=>-1 );

                    query_posts($args);

                    if( have_posts() ) : while( have_posts() ) : the_post();

                        $image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' );
                        $image_w = $image[1];
                        $image_h = $image[2];
                        $image = $image[0];


                        $proportion = ($image_w / $image_h);
            ?>

            <?php if( has_post_thumbnail()  && $post->ID != $leadsponsor && $post->ID !=$silversponsor ) : ?>

                <?php if( $proportion > 1.2 ) : ?>
                        <a href="<?php the_permalink(); ?>" class="grid-50 mobile-grid-50"><img src="<?php echo $image; ?>" alt="<?php echo get_the_title(); ?>" ></a>
                <?php else : ?>
                        <a href="<?php the_permalink(); ?>" class="grid-25 mobile-grid-25"><img src="<?php echo $image; ?>" alt="<?php echo get_the_title(); ?>" ></a>
                <?php endif; ?>

            <?php endif; ?>
            <?php endwhile; endif; wp_reset_query(); ?>

这一点很有效,因为主要赞助商自己呈现,并且从正常赞助商名单中进一步减少重复。这对于银牌赞助商来说也很有效,因为它们在他们的部分中列出,然后从正常赞助商名单中进一步删除。

当我添加第二个银牌赞助商时,问题就出现了。它让第二个白银赞助商很好,但不会从下面的正常赞助商名单中删除第二个银牌赞助商。

我的想法是,由于有两个白银赞助商,由于某种原因(可能是相同的元数据),它没有拿起第二个银牌赞助商(即帖子),但我不确定。任何协助或指示将不胜感激。

很高兴在PM中发送实时网站,如果它有帮助(不想在此列出URL以进行索引......)。

谢谢,

IcedQuick

1 个答案:

答案 0 :(得分:0)

您可以使用查询meta_query中的$args参数执行此类操作。例如:

$args = array(
    'post_type' => 'sponsor',
    'posts_per_page' => '-1',
    'meta_query' => array(
        array(
            'key' => '_url_premium',
            'value' => array( 3, 4 ),
            'compare' => 'IN',
        )
    )
);

$the_query = new WP_Query( $args );


if ( $the_query->have_posts() ) {

    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        // Do something here.
    }

} else {
    // No posts match.
}

wp_reset_postdata();

在此示例中,将返回类型为sponsor并且元值为_url_premium3的所有4类型的帖子。

注意:如果您需要使用的元数据值位于后置元数据中,则可以使用get_post_meta()之类的函数来检索这些值。

参考:http://codex.wordpress.org/Function_Reference/get_post_meta