我对这个有点难过。我正在使用 wordpress,我想使用某种比率查询多个自定义帖子类型并将它们显示在页面上。
假设我有以下帖子类型:
推文、项目、视频和帖子
目前,我当前的查询结果充斥着推文,所有其他帖子类型都被推下页面。
有没有办法制定一个查询,以便(比如说)25% 的结果被推文占用,剩下的 75% 被其他帖子类型占用?本质上,我想减少查询结果中出现的推文数量。
我希望这是有道理的。
非常感谢
我对这个有点难过。我正在使用 wordpress,我想使用某种比率查询多个自定义帖子类型并将它们显示在页面上。
假设我有以下帖子类型:
推文、项目、视频和帖子
目前,我当前的查询结果充斥着推文,所有其他帖子类型都被推下页面。
有没有办法制定一个查询,以便(比如说)25% 的结果被推文占用,剩下的 75% 被其他帖子类型占用?本质上,我想减少查询结果中出现的推文数量。
我希望这是有道理的。
非常感谢
我可能会使用 2 个单独的自定义查询(使用WP_Query )手动处理这个问题。我将假设您希望启用分页(因为它是您唯一的 blogroll 并且最终会变得非常大)。一般来说,策略将是:
1) 构建两个不同的查询(1 个用于您的项目、视频和帖子......而 1 个用于您的推文)。
posts_per_page
2) 使用查询参数的属性设置您想要混合的比率。
3) 循环每个查询,但暂时不要输出它们的标题或内容,而是将每个查询存储在自己的数组中。
4) 创建一个新数组来包含您的“洗牌”博客。
5) 循环遍历这个新数组以输出内容。
$posts_array = array(); // this will temporarily hold your projects/videos/posts
$tweets_array = array(); // this will temporarily hold your tweets
// WP_Query arguments for projects, videos, and posts
$post_args = array (
'post_type' => array('project', 'video', 'post'),
'post_status' => 'publish',
'pagination' => true,
'posts_per_page' => '10',
);
// The Query
$query_posts = new WP_Query( $post_args );
// The Loop will be used to grab the posts and store them in $posts_array
if ( $query_posts->have_posts() ) {
while ( $query_posts->have_posts() ) {
$query_posts->the_post();
// here you can use any number of functions inside the loop to get content or metadata about this post
$posts_array[] = array(
'title' => get_the_title(),
'permalink' => get_permalink(),
'excerpt' => get_the_excerpt(),
'content' => get_the_content(),
'thumbnail' => get_the_post_thumbnail()
);
}
} else {
// no posts found, maybe handle this differently if you wish
}
// Restore original Post Data
wp_reset_postdata();
// WP_Query arguments just for tweets
$tweet_args = array (
'post_type' => 'tweet'
'post_status' => 'publish',
'pagination' => true,
'posts_per_page' => '2',
);
// The Query
$query_tweets = new WP_Query( $tweet_args );
// The Loop will be used for your tweets
if ( $query_tweets->have_posts() ) {
while ( $query_tweets->have_posts() ) {
$query_tweets->the_post();
$tweets_array[] = array(
'title' => get_the_title(),
'permalink' => get_permalink(),
'excerpt' => get_the_excerpt(),
'content' => get_the_content(),
'thumbnail' => get_the_post_thumbnail()
);
}
} else {
// no posts found, maybe handle this differently if you wish
}
// Restore original Post Data
wp_reset_postdata();
$final_array = array(); //this is the array that'll hold the shuffled post types
// this loop is currently built to assume the "posts_per_page" ratio from above
// edit these to your liking if you want to increase the number of tweets per 10 other posts
for ($i = 0; $i < 10; $i++) {
$final_array[] = $posts_array[$i];
// after the 5th normal post, inject a tweet (we only have 2 tweets, so inject the first one)
if ($i == 4) {
$final_array[] = $tweets_array[0];
}
}
// now that all 10 posts are done, throw in the last tweet next
$final_array[] = $tweets_array[1];
// now output your content in your template
foreach ($final_array as $current_post) {
// this will be your markup for each post so replace this with the HTML for your own template
echo '<div class="title"><a href="' . $current_post['permalink'] . '">' . $current_post['title'] . '</a></div>';
echo '<div class="excerpt">' . $current_post['excerpt'] . '</div>';
// etc etc with any of your remaining array elements
}
我没有测试这段代码,所以把它当作伪代码来对待。但总体思路希望是清晰的。
玩得开心!