0

我在显示来自 Wordpress 类别的帖子列表时遇到了一些问题,该类别将基于使用高级自定义字段的自定义字段排除一定数量的帖子。

这是我正在使用的当前代码,可以很好地隐藏它:

while ( have_posts() ) : the_post();
    $is_taken = get_field('taken_check', $this_id);
    if ($is_taken!=1) { 
        get_template_part( 'basket_selection' );
    } 
endwhile;

但是,它只是隐藏了帖子,但仍将其视为“posts_per_page”函数上的帖子。

例如,总共有 20 个帖子,我将限制设置为每页 10 个帖子。如果我用上面的代码隐藏 3 个帖子,它只会在第 1 页显示 7 个帖子,在第 2 页显示 10 个帖子。

有没有办法简单地忽略隐藏的帖子而不将其视为“帖子”?

4

2 回答 2

0

我已经设法通过将 category.php 中的 get_posts 更改为 wp_query 来解决它。

我首先添加了这段代码来检测当前查看的类别并过滤查询以仅显示 take_check = 0。

    $this_cat = get_category(get_query_var('cat'), 'ARRAY_A', false);

    foreach ($this_cat as $this_cat){
        $this_catid = $this_cat;
        break;
    }

    $args = array(
            'posts_per_page' => 10,
            'post_type' => 'post',
        'cat' => $this_catid,
        'orderby' => 'title',
        'order' => 'ASC',
        'paged' => $paged,
        'meta_query' => array(
            array(
                'key' => 'taken_check',
                'value' => '0',
            )
        )
     );

$wp_query = new WP_Query($args);

然后我继续使用默认循环序列。唯一奇怪的代码是基于当前页面而不是帖子检测当前类别的不必要的 foreach 循环。仍然对为什么我不能只使用 $this_cat[0] 感到困惑,因为它是一个数组。它一直返回空白。

哦,好吧,但它现在可以与分页一起使用,所以我很高兴:) 感谢所有帮助!

于 2013-09-05T08:37:51.097 回答
0

get_post试试这个:在查询本身中应用自定义字段参数。

$posts = get_posts(array(
    'posts_per_page' => 10,
    'post_type' => '<YOUR_POST_TYP>',
    'meta_key' => 'taken_check',
    'meta_value' => '<DEFAULT_VALUE_OF_taken_check>'
));

在这里阅读很多:http: //codex.wordpress.org/Template_Tags/get_posts

于 2013-08-28T10:54:06.410 回答