所以,我的网站上有两种特色图片,横向和纵向。肖像都有一个高度> 650像素。没有标签,类别或任何其他wordpress定义的字段区分两者。我试图找出一种方法,只用php来单独查询每个方向的随机帖子。
这是我到目前为止所做的,这是错误的。我试图确定每个帖子缩略图的高度,将其设置为变量,然后将该变量附加到每个帖子。然后,使用查询args数组中的帖子查询帖子。希望我能走上正轨。
<?php
$pposts = get_posts(array('post_type' => 'portfolio'));
foreach ($pposts as $post) {
$url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
list($width, $height, $type, $attr) = getimagesize($url);
if ($height >= 650) {
$orientation = 1; // Portrait
}
else {
$orientation = 2; // Landscape
};
$post->orientation = $orientation;
}
$arg1 = array('orientation' => 1, 'post_type' => 'portfolio', 'orderby' => 'rand', 'showposts' => 1); // Portrait query
$arg2 = array('orientation' => 2, 'post_type' => 'portfolio', 'orderby' => 'rand', 'showposts' => 1); // Landscape query
$query1 = new WP_Query($arg1);
if ( $query1->have_posts() ) {
while ( $query1->have_posts() ) {
$query1->the_post();
the_post_thumbnail();
}
};
$query2 = new WP_Query($arg2);
if ( $query2->have_posts() ) {
while ( $query2->have_posts() ) {
$query2->the_post();
the_post_thumbnail();
}
};
$query3 = new WP_Query($arg1);
if ( $query3->have_posts() ) {
while ( $query3->have_posts() ) {
$query3->the_post();
the_post_thumbnail();
}
};
?>
答案 0 :(得分:0)
您已经在所有post_type =&#39;投资组合中进行了一次循环播放。
所以你不需要secound查询。只为这样的东西构建一个函数。
function get_posts_by_image_size($width, $height, $size = 'full') {
global $post;
$pposts = get_posts(array('post_type' => 'portfolio'));
foreach ($pposts as $post) {
$post_thumbnail_id = get_post_thumbnail_id( $post->ID );
if($post_thumbnail_id) {
$image = wp_get_attachment_image_src( $post_thumbnail_id, $size );
if($image[1] >= $width && $image[2] >= $height) {
the_title(); // here you print the data
}
}
}
}
get_posts_by_image_size(0, 200); // Run the function whrere you want.
答案 1 :(得分:0)
发布此信息是因为它是我问题的完整工作答案以及我想要实现的目标。好吧,所以我拿了Shibi的代码并将帖子ID附加到不同的数组。然后,我在调用帖子缩略图时从这些数组中选择了随机键来引用。最终结果正是我想要的:1)随机肖像,2)随机风景,3)不同的随机肖像。
如果有人看到任何可以改进的地方,请告诉我们。我没有在此代码中包含我的div包装器,因为这只适用于我的情况。我还将原始查询限制为100个帖子只是为了让所有内容运行得更快(可能会进行一些测试以查看它减慢的帖子数量)。
<?php
// Parameters as separate arguments
function get_posts_by_image_size($width, $height, $size = 'full') {
global $post;
$pposts = get_posts(array('post_type' => 'portfolio', 'numberposts'=> 100));
foreach ($pposts as $post) {
$post_thumbnail_id = get_post_thumbnail_id( $post->ID );
if($post_thumbnail_id) {
$image = wp_get_attachment_image_src( $post_thumbnail_id, $size );
if($image[1] >= $width && $image[2] >= $height) {
$portrait[] = get_the_ID();
}
elseif($image[1] >= $width && $image[2] <= $height) {
$landscape[] = get_the_ID();
}
}
}
$portrait_id = array_rand($portrait, 2);
$landscape_id = $landscape[rand(1, count($landscape))];
echo get_the_post_thumbnail( $portrait[$portrait_id[0]]);
echo get_the_post_thumbnail( $landscape_id);
echo get_the_post_thumbnail( $portrait[$portrait_id[1]]);
}
get_posts_by_image_size(0, 650); // Run the function whrere you want.
?>