如果在某些分类中,是否将帖子移到WP_QUERY的顶部?

时间:2014-09-12 作者:user43251

我正试图找出将某些(自定义)帖子提升到Wordpress循环顶部的最佳方法。我不能使用粘性帖子,因为它们都是自定义帖子类型。。我正在考虑使用分类法来实现这一点,但是我不确定它是否会起作用,我想我可能需要2个循环?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

这只是一个你可以尝试的概念

默认情况下,不能在循环内排序。据我所知,你有两个选择

创建两个循环并合并它们。然而,我不建议这样做。如果您对分页和偏移不完全满意,那么它将是一场噩梦

正常运行循环,将结果推到两个单独的数组中,合并两个数组,然后从中提取并显示帖子。可以按常规分页

示例基于具有自定义职位类型和默认职位类型设置的主查询pre_get_posts. 您也可以在任何自定义查询上执行此操作。有关可以使用的成员变量变量列表,请参见WP_Post. <注意,这使用PHP 5.4语法

$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4

if(have_posts()) {
    while(have_posts()) {
       the_post();

       if( \'my_post_type\' == $wp_query->post_type ) {
          $post_type_posts[] = get_the_title();
       }else{
          $other_posts[] = get_the_title();
       }
     }
}

$new_loop = array_merge($post_type_posts, $other_posts);

foreach ($new_loop as $loop) {
   var_dump( $loop );
}  

EDIT

你的想法也会奏效。创建自定义分类法,例如tax 并在tax 比如分类学term-aterm-b. 好吧,说吧term-a 应首先显示。

然后按如下方式更改上述代码:

$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4

if(have_posts()) {
    while(have_posts()) {
       the_post();

       if( has_term( \'term-a\', \'tax\' ) ) {
          $post_type_posts[] = get_the_title();
       }else{
          $other_posts[] = get_the_title();
       }
     }
}

$new_loop = array_merge($post_type_posts, $other_posts);

foreach ($new_loop as $loop) {
   var_dump( $loop );
}  

EDIT 2

对于自定义查询,请使用tax_query, 您可以使用以下选项:

$args = [
\'post_type\' => \'my-post-type\',
\'tax_query\' => [
        [
            \'taxonomy\' => \'tax\',
            \'field\'    => \'slug\',
            \'terms\'    => [ \'term-a\', \'term-b\' ],
        ]
    ]
];

$query = new WP_Query( $args );

$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4

if($query->have_posts()) {
    while($query->have_posts()) {
       $query->the_post();

       if( has_term( \'term-a\', \'tax\' ) ) {
          $post_type_posts[] = get_the_title();
       }else{
          $other_posts[] = get_the_title();
       }
     }
}

wp_reset_postdata();

$new_loop = array_merge($post_type_posts, $other_posts);

foreach ($new_loop as $loop) {
   var_dump( $loop );
}  
有关更多信息,请查看WP_Query

结束

相关推荐

The Loop in Static Page

我对环路有一些问题。我以“Twenty14”主题为例。我正在使用基本循环创建2个php文件。一个是家。其中一个是名为示例页的模板页。php。两者都包含此代码;if( have_posts() ) : while( have_posts() ) : the_post(); the_content; endwhile; endif; 没什么特别的,唯一的区别是我在示例页面上有模板声明。php/** * Template Nam