我目前正在开发一个小博客,其中有一个侧栏显示所有“特殊项目”。
“特殊项目”只是一个类别,侧边栏一次只显示4个帖子,按帖子日期过滤,但我还有一个自定义元框,允许用户发布帖子。 这些特色帖子应该出现在特殊项目的顶部。
现在我的查询是这样的:
new WP_Query("showposts=" . $instance['num'] . "&cat=" . $instance["cat"] . "&order=ASC&order_by=date")
我可以获得这样的特色元数据:
$featured = get_post_meta($single_cat_post->ID, 'soy_featured_post', true);
但是我如何在WP_Query中集成它?
答案 0 :(得分:3)
首先,使用WP_Query时,'showposts'已被'posts_per_page'取代。我在你的代码中纠正了这一点。此外,在循环中,您应该只能使用$ post-> ID而不是$ single_cat_post-> ID。
我会使用两个循环。设置参数,然后在第一个循环中包括检查元值的条件,重置查询,然后执行另一个循环并包括检查元值的条件,如果存在则不输出任何内容。
在第一个查询中,我添加了一个检查,以查看第一个循环返回的帖子数。然后使用该值(减去4),我计算了一个变量,用于第二个循环中的posts_per_page。然后我添加了一个条件,只有在结果大于0时才运行循环。
这是未经测试的,但它应该起作用或者至少让你走上正确的道路!
<?php
$args = array(
'posts_per_page' => 4,
'meta_key' => 'soy_featured_post',
'cat' => $instance["cat"],
'orderby' => 'date',
'order' => 'ASC'
);
$special_post_query = new WP_Query( $args );
$special_posts_found = $special_post_query->found_posts;
if ($special_post_query->have_posts()) :
while( $special_post_query->have_posts() ) : $special_post_query->the_post();
// POST WITH META VALUE OUTPUT
the_title();
endwhile;
endif;
wp_reset_query();
$second_loop_posts_per_page = 4 - $special_posts_found;
if ($second_loop_posts_per_page > 0) {
$args = array(
'posts_per_page' => $second_loop_posts_per_page,
'cat' => $instance["cat"],
'orderby' => 'date',
'order' => 'ASC'
);
if ($special_post_query->have_posts() ) :
while( $special_post_query->have_posts() ) : $special_post_query->the_post();
// Condition to test for NO meta value
if (get_post_meta($post->ID, 'soy_featured_post', true) == null) {
// CODE
the_title();
} else {
// Don't print anything because the meta value exists
}
endwhile;
endif;
wp_reset_query();
} ?>