按元和发布日期订购 WP_Query

问题描述 投票:0回答:1

我目前正在开发一个小博客,它有一个侧边栏,显示所有“特殊项目”。

“特殊项目”只是一个类别,侧边栏一次只会显示 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 中?

wordpress blogs
1个回答
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();
} ?>
© www.soinside.com 2019 - 2024. All rights reserved.