Wordpress query_posts order by rand在类别归档模板中不起作用

时间:2012-06-06 17:05:58

标签: php wordpress

我无法让我的Wordpress主题随机化我在类别档案中显示的帖子[我将它用作CMS]。主页正常随机,我[我认为]正确地改变了WP_query。下面是精确的args数组:

array(4) { ["orderby"]=> string(4) "rand" ["order"]=> string(3) "ASC" ["posts_per_page"]=> string(2) "-1" ["category_name"]=> string(8) "branding" }

为了便于阅读,它是:

orderby => rand
order => ASC
posts_per_page => -1
category_name => branding (or whatever the query_string brings in)

我收到了该类别中的所有帖子,但它们都是以发布日期顺序排列的。

任何线索?或者在have_posts中混洗我的WP_query结果的替代方法?

感谢。

************EDIT************

对不起,我应该更清楚上面的args数组。它是查询数组的var_dump,而不是我添加到查询中的参数。

    $args = array(
        'orderby'        => 'rand',
        'order'      => 'ASC',
        'posts_per_page' => '-1',
    );
    global $wp_query;           
    remove_all_filters('posts_orderby');
    $theq = array_merge($args, $wp_query->query);
    query_posts($theq);

我根据Sheikh Heera的建议添加了remove_all_filters,但它并没有什么不同。

3 个答案:

答案 0 :(得分:3)

然后您可能最好创建一个新查询。这应仅用于分类模板,例如category.php或taxonomy-yourcustomtaxonomy.php。

global $wp_query;

$term = $wp_query->queried_object;

$args=array(
    'orderby' => 'rand',
    'posts_per_page' => -1,
    'post_type' => 'post',
    'tax_query' => array(
            array(
                'taxonomy'  => $term->taxonomy,
                'field'     => 'slug',
                'terms'     => $term->slug,
                )
            )
    );

$new_query = null;
$new_query = new WP_Query($args);

while ($new_query->have_posts()) : $new_query->the_post(); ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div class="entry-meta"><?php // Meta ?></div><!-- .entry-meta -->
        <div class="entry-content"><?php the_content(); ?></div>
    </div>
<?php
endwhile;
wp_reset_postdata();

答案 1 :(得分:1)

它可能是创建问题的另一个插件,但您可以执行以下操作

remove_all_filters('posts_orderby');
$args=array(
    orderby => 'rand'
    order => 'ASC'
    posts_per_page => -1
    category_name => 'branding'
);
query_posts($args);

但请记住,您可以使用此解决方案破坏插件的功能,但它可能对解决问题很有用,但可能并不完美。

答案 2 :(得分:0)

我认为您希望将其与原始查询合并。不需要指定类别,并且如果它也使用自定义分类法也可以工作。

$args = array(
    'posts_per_page' => -1,
    'orderby' => 'rand'
    );

query_posts( array_merge( $wp_query->query, $args) );