如何在存档页面中显示来自当前分类的帖子?

时间:2013-06-08 作者:Milo

我使用下面的代码在category archive页面(使用archive.php)中显示当前类别中的随机帖子。但是,在标记或分类归档页面中,无法从当前标记或分类中正确显示帖子(由于仅限于类别的限制)。如何修改以使其与标记和分类法(或者仅仅是分类法,因为类别和标记也是分类法)一起工作。谢谢

// assign the variable as current category
$currentcategory = $cat;

// concatenate the query
$args = \'showposts=1&cat=\' . $currentcategory . \'&orderby=rand\';

$random_query = new WP_Query( $args );

// The Loop

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

// custom template for the random post

}

} else {

// no posts found

}

// Restore original Post Data
wp_reset_postdata();
编辑了有关s\\u ha\\u dum答案的代码:

<?php // The Query

if (is_tax() || is_category() || is_tag() ){
    $qobj = $wp_query->get_queried_object();

// concatenate the query
    $args = array(
        \'posts_per_page\' => 1,
        \'orderby\' => \'rand\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => $qobj->taxonomy,
                \'field\' => \'id\',
                \'terms\' => $qobj->term_id
                )
            )
        );
}

$random_query = new WP_Query( $args );

// The Loop
if ( $random_query->have_posts() ) {
    while ( $random_query->have_posts() ) {
        $random_query->the_post(); ?>

//HTML tempalte

<?php   }
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata(); ?>

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您需要获取页面的查询对象,并动态填写分类信息。

if (is_tax() || is_category() || is_tag() ){
    $qobj = get_queried_object();
    // var_dump($qobj); // debugging only
    
    // concatenate the query
    $args = array(
      \'posts_per_page\' => 1,
      \'orderby\' => \'rand\',
      \'tax_query\' => array(
        array(
          \'taxonomy\' => $qobj->taxonomy,
          \'field\' => \'id\',
          \'terms\' => $qobj->term_id,
    //    using a slug is also possible
    //    \'field\' => \'slug\', 
    //    \'terms\' => $qobj->name
        )
      )
    );

    $random_query = new WP_Query( $args );
    // var_dump($random_query); // debugging only

    if ($random_query->have_posts()) {
        while ($random_query->have_posts()) {
          $random_query->the_post();
          // Display
        }
    }
} 
目前尚不清楚您是否需要此环路作为主环路的补充或替代。我假设这是;除此之外;因为如果要替换主查询,它将有效地删除归档功能。你我没有真正的档案,只是档案中的一篇随机帖子,它本身并不友好。

您可以使用category.php 以及tag.php 归档模板以分别处理标记和类别。您不需要使用archive.php.

参考文献

http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
http://codex.wordpress.org/Function_Reference/get_queried_object

SO网友:birgire

您可以考虑将主查询与自定义pre_get_posts 钩子:

add_action( \'pre_get_posts\', \'custom_pre_get_posts\' );

function custom_pre_get_posts( $query ) {
    if ( is_admin() or ! $query->is_main_query() )
        return;

    if ( is_archive() ) {
        $query->set( \'orderby\', \'rand\' );
        $query->set( \'posts_per_page\',  1 );
    }

}
和通常的循环,而不是额外的WP_Query().

结束

相关推荐

Custom taxonomy in short code

我在网格显示的主题中使用短代码。代码仅考虑类别ID。我还想添加自定义分类法,以便将输出作为分类帖子和自定义分类帖子。 function five_col( $atts ) { extract( shortcode_atts( array( \'cats\' => \'1\', \'num\' => \'2\', \'offset\' => \'0\', ), $atts ) );