在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
答案 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_premium
或3
的所有4
类型的帖子。
注意:如果您需要使用的元数据值位于后置元数据中,则可以使用get_post_meta()
之类的函数来检索这些值。
参考:http://codex.wordpress.org/Function_Reference/get_post_meta