从不使用query_posts
, 它打破了许多内置函数、自定义函数和插件所依赖的主要查询对象,从而产生了无数问题。这是纯粹的邪恶,你也应该避免它。
对于custom queries, 使用WP_Query
或get_posts
, 如果只需要更改当前主查询(,单页、静态首页和真实页除外),请使用pre_get_posts
.
您的查询完全错误,并且您没有对随机类别号进行任何操作。让我们看看你的代码,重写;(NOTE: 需要PHP 5.4+)
$numbers = [\'5\',\'6\',\'7\']; //id\'s of the categories
// Get a random key from the array
$rand_key = array_rand( $numbers );
// Get a random category ID from the array
$random_cat_ID = $numbers[$rand_key];
// Now build our query args
$args = [
\'cat\' => $random_cat_ID,
\'posts_per_page\' => 1
];
$q = new WP_Query( $args );
// Run the loop
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// Display what you need from the loop like title, content etc
}
wp_reset_postdata();
}
如果需要无序排列中的类别ID数组,请编辑
$numbers
然后从每个类别中获取最新帖子,我们需要一种不同的方法。您需要意识到,您需要为每个类别运行一个查询。对于这一点,您真的无能为力,因为您将使用随机排序。
让我们看看代码:
$numbers = [\'5\',\'6\',\'7\']; //id\'s of the categories
// Shuffle the array
$rand_key = shuffle( $numbers );
// Run a foreach loop to get the newest post from the categories
foreach ( $numbers as $cat_id ) {
$args = [
\'posts_per_page\' => 1,
\'cat\' => $cat_id,
\'no_found_rows\' => true // Legally skips pagination
// Add any extra arguments
];
$q = new WP_Query( $args );
// Run the loop
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// Display what you need from the loop like title, content etc
}
wp_reset_postdata();
}
}